[이코테] 그래프 이론_여행 계획 (python)

juyeon·2022년 8월 20일
0

문제

나의 풀이

1. 서로소 집합 알고리즘

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()) # 여행지 수, 여행 계획 도시 

parent = list(range(n + 1)) # 부모를 자기 자신으로 초기화

for i in range(1, n + 1):
    arr = list(map(int, input().split())) # 도시간 연결 정보
    for j in range(n):
        if arr[j]: # 연결되어 있다면
            union_parent(parent, i, j + 1) # i와 j + 1가 속한 집합 합치기
            
go = list(map(int, input().split())) # 여행 계획

cycle =  True
for i in range(m - 1):
    if find_parent(parent, go[i]) != find_parent(parent, go[i + 1]):
        cycle = False

print('YES') if cycle else print('NO')
profile
내 인생의 주연

0개의 댓글