문제
https://www.acmicpc.net/problem/1717
1717번: 집합의 표현
첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는
www.acmicpc.net
코드
import sys
sys.setrecursionlimit(1000000)
input=sys.stdin.readline
def find(x):
if parent[x]!=x:
parent[x]=find(parent[x])
return parent[x]
def union(b,c):
b=find(b)
c=find(c)
if b<c:
parent[c]=b
else:
parent[b]=c
n,m=map(int, input().split())
parent=[0]*(n+1)
for i in range(n+1):
parent[i]=i
for i in range(m):
a,b,c=map(int, input().split())
if a==0:
union(b,c)
if a==1:
if find(b)==find(c):
print("YES")
else:
print("NO")
생각 정리
기본적인 union-find 문제이다
'문제풀이 > 그래프' 카테고리의 다른 글
[파이썬] [그래프] Pro 방의 개수 (0) | 2022.02.20 |
---|---|
[파이썬] [그래프] Pro 순위 (0) | 2022.02.20 |
[파이썬] [그래프] 백준 2252 줄 세우기 (0) | 2022.02.08 |
[파이썬] [그래프] 백준 1922 네트워크 연결 (0) | 2022.02.07 |
[파이썬] [그래프] union-find, kruskal, topology sort (0) | 2022.02.07 |