def find(x):
if x == parent[x]:
return x
else:
p = find(parent[x])
parent[x] = p
return parent[x]
def union(x, y):
x = find(x)
y = find(y)
if x!= y:
parent[y] = x
number[x] += number[y]
test_case = int(input())
for _ in range(test_case):
parent = dict()
number = dict()
f=int(input())
for _ in range(f):
x, y = input().split(' ')
if x not in parent:
parent[x]=x
number[x]=1
if y not in parent:
parent[y]=y
number[y]=1
union(x, y)
print(number[find(x)])
* Union-Find 알고리즘을 사용하여 문제를 풀었다
* Path compreesion 기법을 사용하였다
* 새로운 연관 노드를 Union 할때마다 최상위 Parent 노드에 +1 해준다
* 결과적으로 최상위 노드의 number 값이 해가 된다
'개발 > 알고리즘' 카테고리의 다른 글
[백준] #1427 소트인사이트 (0) | 2020.10.28 |
---|---|
[백준] #2750 수 정렬하기 (0) | 2020.10.28 |
[백준] #10930 SHA-256 (0) | 2020.10.27 |
[백준] #5397 키로거 (0) | 2020.10.27 |
[백준] #1966 프린터 큐 (0) | 2020.10.27 |
댓글