practivceAlgorithm/백준
[백준][Python] 7511 소셜네트워킹
findTheValue
2021. 8. 5. 09:17
마지막 비교때 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()