반응형
문제
https://www.acmicpc.net/problem/1717
소스코드
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 6)
n, m =map(int, input().split())
parent = [i for i in range(n + 1)]
def union(a, b):
a = find(a)
b = find(b)
if a < b:
parent[b] = a
if a > b:
parent[a] = b
def find(a):
if a == parent[a]:
return a
parent[a] = find(parent[a])
return parent[a]
def is_connected(a, b):
return find(a) == find(b)
for i in range(m):
a, b, c = map(int, input().split())
if a == 0:
union(b, c)
else:
if is_connected(b, c):
print("YES")
else:
print("NO")
간단한 유니온파인드 문제입니다.
union 함수부분을 랭킹기반이나 크기기반 등 최적화된 알고리즘을 사용하면 더욱 빨라집니다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준/Python] 32690번 Starlight Express (0) | 2024.12.04 |
---|---|
[백준/Python] 1238번 파티 - (다익스트라) (0) | 2024.11.27 |
[백준/Python] 2252번 줄 세우기 - (위상 정렬) (0) | 2024.11.24 |
[백준/Python] 1922번 네트워크 연결 - (크루스칼) (0) | 2024.11.23 |
[백준/Python] 1516번 게임 개발 - (위상정렬) (1) | 2024.11.22 |
댓글