[설명 없음] 1043번 거짓말 (python)

MineeHyun·2025년 1월 16일

문제 풀이

목록 보기
24/25

아카이브 용으로...
설명은 나중에...

import sys

n, m = map(int, sys.stdin.readline().split())
knows = list(map(int, sys.stdin.readline().split()))
k = knows[0]
parent = [i for i in range(n+1)]
parties = []

def find(x):
    if parent[x] != x:
        parent[x] = find(parent[x])
    return parent[x]

def union (a, b):
    pA = find(a)
    pB = find(b)
    if pA != pB:
        parent[pB] = pA
    
for _ in range(m):
    parties.append(list(map(int, sys.stdin.readline().split()))[1:])

for party in parties:
    f = party[0]
    for person in party[1:]:
        union(f, person)
know_roots = set(find(person) for person in knows[1:])
result = 0
for party in parties:
    if all(find(person) not in know_roots for person in party):
        result += 1

print(result)

유니온 파인드라는 멋진 개념을 알게 됐다
그래프 탐색은 좀만 게을리 하면 이.. 이게 무슨 그래프인데 하게 되는 듯...

0개의 댓글