728x90
https://www.acmicpc.net/problem/1976
1976번: 여행 가자
동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인
www.acmicpc.net
해당 문제는 아래의 문제와 동일한 문제로 볼 수 있습니다.
https://bigkwangs.tistory.com/80
[백준] 1717번 : 집합의 표현
https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수
bigkwangs.tistory.com
모든 여행을 갈 수 있는 경로를 찾는 방법은 각각의 모든 노드가 같은 부모노드이면 여행이 가능하고 그렇지 않다면 여행이 불가능합니다.
def union(a, b):
v1 = find(a)
v2 = find(b)
if v1 == v2: # 부모가 같을 경우 무시한다.
return
if v1 > v2:
parent[v1] = v2
else:
parent[v2] = v1
def find(a):
if a != parent[a]:
parent[a] = find(parent[a])
return parent[a]
n = int(input())
m = int(input())
parent = [i for i in range(n+1)]
graph = []
for i in range(n):
arr = list(map(int, input().split()))
graph.append(arr)
for i in range(n):
for j in range(n):
if graph[i][j] == 1:
union(i+1, j+1) # 그래프값이 1일경우 union 한다.
travel_list = list(map(int ,input().split()))
def travel():
for i in range(1, len(travel_list)):
if find(travel_list[i -1]) != find(travel_list[i]):
print("NO")
return
print("YES")
return
travel()
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1967번 : 트리의 지름 (0) | 2023.08.22 |
---|---|
[백준] 1043번 : 거짓말 (0) | 2023.08.22 |
[백준] 1717번 : 집합의 표현 (0) | 2023.08.21 |
[백준] 9466번 : 텀 프로젝트 (0) | 2023.08.21 |
[백준] 9019번 : DSLR (0) | 2023.08.18 |