목차
Turf Wars
풀이
코드
토론
Turf Wars
ps
링크
acmicpc.net/…
출처
BOJ
문제 번호
15880
문제명
Turf Wars
레벨
다이아몬드 5
분류
2-sat
시간복잡도
O((nm)^2)
인풋사이즈
n<=300, m<=15
사용한 언어
Python
제출기록
990924KB / 7868ms
최고기록
5800ms
해결날짜
2022/11/11
풀이
각 영역을 boolean 변수로 만들자. 변수의 값은 그 영역을 포기하면 True가 되고, 포기 안하면 False를 갖도록 하자.
이제 변수들간의 관계를
2-SAT
으로 모델링할수 있다.
영역 x와 영역 y가 겹친다면, 둘중 한개 이상은 포기되어야 한다 ⇒ 이것은 그냥 x or y 로 표현할수 있다.
같은 갱에 속한 영역들 중에서는 최대 한개만 true가 될수 있다 ⇒ 이것은
at-most-one
조건으로 표현하면 된다.
이렇게 모델링한 다음, 2-sat이 해를 갖는지 여부만 확인하면 된다. O(N*M)개의 변수와 O((N*M)^2)개의 절을 갖는 CNF로 표현되므로 총 시간복잡도는 O((N*M)^2).
코드
(다이아몬드 이상은 코드 첨부 생략)
Dependency:
teflib.twosat.TwoSat
BOJ
,
다이아몬드 5