여행 계획

최대 1 분 소요

이코테 - 여행계획

문제유형 : 그래프

해결방법

이 문제는 서로소 집합 알고리즘을 이용하면 해결할 수 있다.

  • 입력으로 받은 노드가 모두 같은 집합에 속하는지 parent를 찾아서 체크해주면 정답 판정을 받을 수 있다.
입력예시)
5 4
0 1 0 1 1
1 0 1 1 0
0 1 0 0 0
1 1 0 0 0
1 0 0 0 0
2 3 4 3
import sys
input = sys.stdin.readline


def find_parent(parent, x):
    if parent[x] != x:
        parent[x] = find_parent(parent, parent[x])
    return parent[x]


def union_parent(parent, a, b):
    a = find_parent(parent, a)
    b = find_parent(parent, b)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b


n, m = map(int, input().split())

travel = []
for i in range(n):
    arr = list(map(int, input().split()))
    travel.append(arr)

result = list(map(int, input().split()))

parent = [i for i in range(n)]

for i in range(n):
    for j in range(n):
        if travel[i][j] == 1:
            union_parent(parent, i, j)

temp = parent[result[0] - 1]
answer = "YES"
for res in result:
    if parent[res-1] == temp:
        continue
    else:
        answer = "NO"
        break

print(answer)

댓글남기기