문제.
풀이.
https://turret1234.tistory.com/176
위 링크랑 풀이가 거의 유사하다. 입력 조건이 조금 다르지 푸는 알고리즘은 거의 똑같다.
연결된 집합끼리 유니온 연산을 해 주고 여행 계획인 도시끼리 파인드 연산을 해서 모두 같은 집합이라면 yes 아니면 no를 출력하면 된다.
소스코드.
import sys
# 유니온 (집합 합치기)
def union(a, b):
a = find(a)
b = find(b)
if a < b:
parent[b] = a
else:
parent[a] = b
# 파인드 (루트 노드 찾기)
def find(target):
if target == parent[target]:
return target
parent[target] = find(parent[target])
return parent[target]
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 6)
n = int(input())
m = int(input())
parent = [i for i in range(n)]
isTrue = True
for i in range(n):
check = list(map(int, input().split()))
# union 연산
for c in range(len(check)):
if check[c] == 1:
union(i, c)
plan = list(map(int, input().split()))
# find 연산
for i in range(1, len(plan)):
if find(plan[i-1]-1) != find(plan[i]-1):
isTrue = False
break
print('YES' if isTrue else 'NO')
'프로그래밍 > 백준' 카테고리의 다른 글
백준 20040 사이클 게임 - 파이썬 (0) | 2021.08.04 |
---|---|
백준 4195 친구 네트워크 - 파이썬 (0) | 2021.08.03 |
백준 1717 집합의 표현 - 파이썬 (0) | 2021.08.03 |
백준 5639 이진 검색 트리 - 파이썬 (0) | 2021.08.03 |
백준 2263 트리의 순회 - 파이썬 (0) | 2021.08.03 |