반응형

 문제

 https://www.acmicpc.net/problem/1717




유니온 파인드

서로소 집합 그리고 병합 찾기 집합 이라고도 불리며 여러 서로소 집합의 정보를 저장하

고 있는 자료구조를 의미합니다.

아래사이트가 잘 설명되있습니다.

https://twpower.github.io/115-union-find-disjoint-set



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import sys
 
 
n,m=map(int,sys.stdin.readline().split())
 
 
parents=[i for i in range(n+1)]#먼저 모든 노드의 루트를 자신으로 지정한다.
 
def Find(x):#x로 들어온 원소의 루트노드 반환
    if x==parents[x]:#루트와 같다면 반환
        return x
    else:#루트노드 찾아가기
        y=Find(parents[x])
        parents[x]=y
        return y
 
def Union(x,y):
    x=Find(x)
    y=Find(y)
    if x!=y:#합쳐준다.
        parents[y]=x
 
 
for _ in range(m):
    command,a,b=map(int,sys.stdin.readline().split())
    if command==0:#합친다
        Union(a,b)
 
 
    elif command==1:#각 루트 찾아서 비교
        a_parents=Find(a)
        b_parents=Find(b)
        if a_parents==b_parents:#루트가 같으면
            print("YES")
        else:
            print("NO")
 
print(parents)
 

cs



반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기