마지막 비교때 parent[v]==parent[u]로 썼다가 한참 틀렸다. 부모는 한칸위고 find가 루트를 찾는거라 find비교를 했어야했는데 두개의 차이에 대해 고민을 안해봤던 것 같아서 이런 문제가 생겼던 것같다. 오늘 확실히 알고간다.
import sys
input = sys.stdin.readline
def union(a,b): #집합이 다를경우 합침
a=find(a)
b=find(b)
if a<b: parent[b]=a
else: parent[a]=b
def find(x): # 루트 노드를 찾아감
if parent[x]==x:
return x
parent[x]=find(parent[x])
return parent[x]
T = int(input())
for test in range(1,T+1): #case수 반복.
n=int(input())
k=int(input())
parent = {i:i for i in range(n)} # initialize 자기가 루트노드
for _ in range(k): # 루트노드가 다르면 union으로 tree병합
a,b = map(int,input().split())
if find(a)!=find(b):
union(a,b)
m=int(input())
print(f'Scenario {test}:')
for _ in range(m): # u랑v랑 집합 같으면 1, 틀리면 0출력.
u,v = map(int,input().split())
# 경로 압축 한다고 해서 rank가 바로 2가 되는건 아니다.
if find(u)==find(v):
print(1)
else:
print(0)
print()
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 14503 로봇청소기 (0) | 2021.08.05 |
---|---|
[백준][Python] 20055 컨베이어벨트위의 로봇 (0) | 2021.08.05 |
[백준][Python] 14501 퇴사 (0) | 2021.08.03 |
[백준][Python] 5972 택배배송 (0) | 2021.08.03 |
[백준][Python] 2042 구간합구하기 (0) | 2021.08.03 |