[BOJ] 9372 상근이의 여행
그래프 이론, 신장 트리
해당 문제는 그래프 이론에 대한 문제이다. 신장 트리의 특징을 알고 있는가 물어보는 문제이다. 신장 트리의 간선의 개수는 노드 개수 - 1 이다.
해당 문제를 보자마자 최소 신장 트리를 구하기 위해 기계적으로 Union-find 코드를 작성하고 보니, 단순히 개수만 출력하는 문제였다. 따라서 다 지우고 입력받은 노드의 개수 - 1을 출력하였더니 정답… 항상 개념을 인지하고 사고하는 습관을 길러야 겠다.
코드는 아래와 같다.
import sys
# def find_parent(parent, x):
# if parent[x] != x:
# parent[x] = find_parent(parent, parent[x])
# return parent[x]
#
#
# def union_parent(parent, a, b):
# a = find_parent(parent, a)
# b = find_parent(parent, b)
# if a < b:
# parent[b] = a
# else:
# parent[a] = b
def solution():
n, m = map(int, sys.stdin.readline().rstrip().split())
parent = [0] * (n + 1)
for _ in range(m):
a, b = map(int, sys.stdin.readline().rstrip().split())
# union_parent(parent, a, b)
# kinds = set(parent)
# return len(kinds)
return n - 1
if __name__ == "__main__":
T = int(sys.stdin.readline().rstrip())
for _ in range(T):
print(solution())