import sys
def input():
return sys.stdin.readline().rstrip()
def find_parents(X):
if X == make_set[X]:
return X
make_set[X] = find_parents(make_set[X])
return make_set[X]
def union(x,y):
X = find_parents(x)
Y = find_parents(y)
if X !=Y:
if ranks[X]< ranks[Y]:
X,Y = Y,X
make_set[Y] = X
if ranks[X] == ranks[Y]:
ranks[X] += 1
return True
return False
T = int(input())
for tc in range(1,T+1):
N = int(input())
make_set = [i for i in range(N)]
ranks = [1 for _ in range(N)]
for _ in range(int(input())):
x,y = map(int,input().split())
union(x,y)
print(f'Scenario {tc}:')
for _ in range(int(input())):
x,y = map(int,input().split())
if find_parents(x) != find_parents(y):
print(0)
else:
print(1)
if tc != T:
print()
전형적인 분리집합 문제였다.
들어오는 입력대로 union을 해주었고, 서로의 부모가 다를시에는 0 같을 시에는 1이 출력되게 했다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 13418 학교 탐방하기 (0) | 2021.09.02 |
---|---|
[BOJ/백준] 11780 플로이드 2 (0) | 2021.09.02 |
[BOJ/백준] 5430 AC (0) | 2021.09.02 |
[BOJ/백준] 4095 최대 정사각형 (0) | 2021.09.02 |
[BOJ/백준] 3673 나눌 수 있는 부분 수열 (0) | 2021.09.02 |