본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 16964 DFS 스페셜 저지

by Alan_Kim 2023. 1. 27.
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
반응형

댓글