1. 문제 설명
친구 네트워크
2. 문제 분석
Union-Find
를 통해 노드 별 포함 관계를 표시할 수 있다. 크루스칼 알고리즘에서 사용한 바를 그대로 활용.
Find
함수를 사용할 때 메모라이제이션을 통해 재귀 시간을 단축할 수 있다.
3. 나의 풀이
import sys
t = int(sys.stdin.readline().rstrip())
def find(x):
if parents[x] == x: return x
parents[x] = find(parents[x])
return parents[x]
def union(x, y):
x = find(x)
y = find(y)
if x != y:
parents[x] = y
numbers[y] += numbers[x]
for _ in range(t):
f = int(sys.stdin.readline().rstrip())
parents = {}
numbers = {}
for _ in range(f):
p1, p2 = sys.stdin.readline().rstrip().split()
if not parents.get(p1):
parents[p1] = p1
numbers[p1] = 1
if not parents.get(p2):
parents[p2] = p2
numbers[p2] = 1
union(p1, p2)
print(numbers[find(p1)])