File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed
Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+ import sys
2+ sys .setrecursionlimit (10 ** 8 )
3+ input = sys .stdin .readline
4+
5+ def union (a , b ):
6+ p_a = find (a )
7+ p_b = find (b )
8+
9+ if p_a > p_b : # a의 대표보다 b의 대표가 더 작은 값을 가지면,
10+ parent [p_a ] = p_b # a가 속한 집합을 b의 집합에 합치기
11+ else :
12+ parent [p_b ] = p_a # 그렇지 않으면 b의 집합을 a의 집합에 합치기
13+
14+ def find (a ):
15+ if a == parent [a ]: # a가 자기 자신의 부모이면 대표 노드
16+ return a
17+
18+ parent [a ] = find (parent [a ]) # 경로 압축을 통해 a의 부모를 대표 노드로 재설정
19+ return parent [a ]
20+
21+ # 도시의 개수 n과 여행 계획에 포함된 도시의 수 m을 입력받기
22+ n = int (input ())
23+ m = int (input ())
24+
25+ parent = [i for i in range (n )] # 각 도시는 처음에 자기 자신이 대표 노드.
26+
27+ # n개의 줄에 걸쳐 도시 간 연결 정보를 입력받고, 연결되어 있으면 union 연산 수행
28+ for i in range (n ):
29+ arr = list (map (int , input ().split ()))
30+ for j in range (n ):
31+ if arr [j ]: # 1이면 i와 j가 연결되어 있으므로 union 연산 수행
32+ union (i , j )
33+
34+ # 여행 계획을 입력
35+ plan = list (map (int , input ().split ()))
36+ result = "YES"
37+ # 여행 계획에 있는 모든 도시가 같은 집합(대표 노드)을 가지는지 확인
38+ for i in range (1 , m ):
39+ if parent [plan [i ]- 1 ] != parent [plan [0 ]- 1 ]:
40+ result = "NO"
41+ break
42+
43+ print (result )
You can’t perform that action at this time.
0 commit comments