ps:problems:boj:3648
아이돌
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 3648 |
문제명 | 아이돌 |
레벨 | 플래티넘 3 |
분류 |
2-sat |
시간복잡도 | O(T*(n+m)) |
인풋사이즈 | T<=?, n<=1000, m<=2000 |
사용한 언어 | Python |
제출기록 | 32688KB / 444ms |
최고기록 | 276ms |
해결날짜 | 2022/11/03 |
태그 |
풀이
- 여기에 추가적으로 1번 참가자는 항상 통과해야 한다는 조건이 붙는다. (x_1 or x_1)절을 추가해주기만 하면 된다.
- n개의 변수와 m개의 절로 CNF가 만들어지므로, 총 시간복잡도는 O(n+m)
코드
"""Solution code for "BOJ 3648. 아이돌".
- Problem link: https://www.acmicpc.net/problem/3648
- Solution link: http://www.teferi.net/ps/problems/boj/3648
Tags: [2-sat]
"""
import sys
from teflib import twosat
def main():
while line := sys.stdin.readline():
n, m = [int(x) for x in line.split()]
two_sat = twosat.TwoSat(n)
for _ in range(m):
a, b = [int(x) for x in sys.stdin.readline().split()]
x = a - 1 if a > 0 else a
y = b - 1 if b > 0 else b
two_sat.x_or_y(x, y)
two_sat.x_is_true(0)
print('yes' if two_sat.is_satisfiable() else 'no')
if __name__ == '__main__':
main()
- Dependency: teflib.twosat.TwoSat
ps/problems/boj/3648.txt · 마지막으로 수정됨: 2022/11/07 15:43 저자 teferi
토론