BOJ 1739 도로 정비하기
BOJ 1739 도로 정비하기
문제 내용
개의 가로 도로와 개의 세로 도로가 개 지점에서 서로 교차하는 형태의 도로망이 있습니다. 번 가로 도로와 번 세로 도로가 교차하는 지점을 라고 합시다.
대의 차가 각각 출발지 에서 도착지 로 이동하려고 하는데, 각 차는 최대 하나의 가로 도로와 최대 하나의 세로 도로만을 이용할 수 있습니다.
대의 차가 조건을 충족하면서 출발지에서 도착지로 이동할 수 있도록 각각의 도로를 일방통행으로 만들 수 있는지 판별하세요.
입력
첫 줄에 테스트 케이스의 개수 가 주어집니다. ()
각 테스트 케이스에 대해, 첫 줄에 , , 가 주어집니다. ()
다음 줄에는 각각의 차의 출발지와 도착지를 나타내는 값 , , , 가 순서대로 주어집니다. (, )
출발지와 도착지는 같을 수 있습니다.
출력
각 테스트 케이스에 대해, 각각의 도로를 일방통행으로 만들 방법이 있으면 Yes, 아니면 No를 출력합니다.
문제 풀이
스포일러
이 문제는 2-SAT으로 모델링하여 풀 수 있습니다.
먼저 “번째 가로 도로가 오른쪽 방향이다"와 “번째 세로 도로가 아래 방향이다"를 변수로 만듭니다. 그러면 각각의 차에 대해 다음과 같이 조건식을 세울 수 있습니다.
- 출발지와 도착지가 같다면 무시합니다.
- 두 지점의 가로 도로 번호가 같다면, 그 가로 도로의 방향을 고정합니다. 마찬가지로, 두 지점의 세로 도로 번호가 같다면, 그 세로 도로의 방향을 고정합니다.
- 그렇지 않다면, 가로로 먼저 이동하는 것과 세로로 먼저 이동하는 것의 두 가지 방법이 있습니다. 각 방법은 두 개의 도로의 방향을 고정하며, 이는 두 개의 항(변수 또는 변수의 부정)의 AND로 나타낼 수 있습니다. 적어도 둘 중 한 가지 방법으로 이동이 가능해야 하므로, 이는 꼴의 식이 되고, 이를 분배법칙으로 전개하면 가 되어 2-SAT 모델링에 사용할 수 있게 됩니다.
이제 2-SAT을 푸는 함수에 넣고 결과가 나오는지 확인하면 됩니다.
Last updated on