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()