알고리즘/[python] 백준 BOJ
[python] 백준 16964 DFS 스페셜 저지
Alan_Kim
2023. 1. 27. 00:01
728x90
반응형
https://www.acmicpc.net/problem/16964
16964번: DFS 스페셜 저지
첫째 줄에 정점의 수 N(2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에는 트리의 간선 정보가 주어진다. 마지막 줄에는 DFS 방문 순서가 주어진다. DFS 방문 순서는 항상 N개의 정수로 이루
www.acmicpc.net
문제 해결
- DFS와 BFS를 같이 쓰는 문제
- 입력 값을 하나씩 뽑아서 연결된 간선이 있을 때 다음 입력값과 같은 것이 있으면 계속 dfs를 이어 나간다.
- 끝까지 입력값을 이어나갈 수 있으면 1을 출력 그 전에 dfs가 끝나버리면 0을 출력
CODE
import sys
input = sys.stdin.readline
from collections import deque
sys.setrecursionlimit(10000)
def dfs(plan):
tmp = plan.popleft()
if not plan:
print(1)
exit()
visited[tmp] = 1
for i in range(len(graph[tmp])):
if plan[0] in graph[tmp] and visited[plan[0]]==0:
dfs(plan)
return
if __name__=='__main__':
n = int(input())
graph = [[] for _ in range(n+1)]
visited = [0 for _ in range(n+1)]
for _ in range(n-1):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
plan = deque(map(int, input().split()))
if plan[0] != 1:
print(0)
else:
dfs(plan)
print(0)
728x90
반응형