๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold4] 1043๋ฒˆ_๊ฑฐ์ง“๋ง

Dbswnstjd 2023. 5. 12. 15:16

๋ฌธ์ œ

https://www.acmicpc.net/problem/1043

 

1043๋ฒˆ: ๊ฑฐ์ง“๋ง

์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 1043๋ฒˆ ๋ฌธ์ œ - ๊ฑฐ์ง“๋ง
import sys
n, m = list(map(int, sys.stdin.readline().split()))
truth = list(map(int, sys.stdin.readline().split()))[1:]

KNOW_TRUTH = 0
parent = [i for i in range(n + 1)]
for person in truth:
    parent[person] = KNOW_TRUTH

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

def union(a, b):
    a = find(a)
    b = find(b)

    if a < b:
        parent[b] = a
    else:
        parent[a] = b

parties = []
for _ in range(m):
    party = list(map(int, sys.stdin.readline().split()))[1:]
    for i in range(len(party) - 1):
        union(party[i], party[i + 1])
    parties.append(party)

answer = 0
for party in parties:
    know = False
    for i in range(len(party)):
        if find(party[i]) == KNOW_TRUTH:
            know = True
            break
    if not know:
        answer += 1

print(answer)

์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ ํ’€์ด์ด๋‹ค.