1.2 방법을 선택했을 때, union과정에서 어떤 기준으로 하위노드를 설정할지 그 기준을 명확히 세워야한다.
따라서 union 연산을 실행할 때 뒤에 나오는 노드가 무조건 더 하위 노드인 것으로 구현할 수 있다.

def union(friend_cnt,parent,a,b):
    a=find(parent,a)
    b=find(parent,b)
    if a!=b:
        parent[b]=a
def find(parent,a):
    if parent[a]!=a:
        parent[a]=find(parent,parent[a])
    return parent[a]
이때 부모노드는 find 함수에서 최상위 root노드를 가리키게 경로 압축을 적용해 최종적으로 같은 네트워크 내에서 root노드에 해당 네트워크의 총 인원수가 들어가게 된다.
아래의 예시를 들어보자
3
Fred Barney
Barney Betty
Betty Wilma

관계가 추가될때마다 union과정에서 root노드에 "네트워크 내 사람 수"를 더해주는 것을 확인할 수 있다.
이는 이전의 union함수에서의 수정이 필요하다. friend_cnt[a]+=friend_cnt[b]를 추가하여 함수를 완성해주자.
def union(friend_cnt,parent,a,b):
    a=find(parent,a)
    b=find(parent,b)
    if a!=b:
        parent[b]=a
        friend_cnt[a]+=friend_cnt[b]
전체 코드는 아래와 같다. 주석을 해제하면 주요한 변수들의 값 변화를 확인할 수 있다.
import sys
input=sys.stdin.readline
def find(parent,a):
    if parent[a]!=a:
        parent[a]=find(parent,parent[a])
    return parent[a]
def union(friend_cnt,parent,a,b):
    a=find(parent,a)
    b=find(parent,b)
    if a!=b:
        parent[b]=a
        friend_cnt[a]+=friend_cnt[b]
for _ in range(int(input())):
    f=int(input())
    parent_map={}
    friend_cnt={}
    for i in range(f):
        a,b=input().split()
        if a not in parent_map.keys():
            parent_map[a]=a
            friend_cnt[a]=1
        if b not in parent_map.keys():
            parent_map[b]=b
            friend_cnt[b]=1
        
        union(friend_cnt,parent_map,a,b)
        
        print(i)
        print(parent_map)
        print(friend_cnt)
        print(friend_cnt[parent_map[a]])
        print("*"*10)