====== 아이돌 ====== ===== 풀이 ===== * 기본적인 [[ps:2-sat]]문제. 참가자마다 변수를 만들고, i번 참가자가 탈락이면 x_i=False, 통과면 x_i=True로 모델링 하면, 심사위원들마다 or 절이 한개씩 나온다. 여기까지는 사실상 입력 포맷까지도 [[ps:problems:boj:11280]]과 똑같다 * 여기에 추가적으로 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: [[:ps:teflib:twosat#TwoSat|teflib.twosat.TwoSat]] {{tag>BOJ ps:problems:boj:플래티넘_3}}