문제 링크: https://www.acmicpc.net/problem/16964
백준 알고리즘 기초 2/2 602에서 2번째 - 16964번 DFS 스페셜 저지를 풀어보았다.
풀이: https://vixxcode.tistory.com/29
C++
Python
import sys
N = int(sys.stdin.readline())
graph=[[] for _ in range(N+1)]
for _ in range(N-1):
a,b=map(int,sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
ans= list(map(int,sys.stdin.readline().split()))
level=[False]*(N+1)
tsize = [0]*(N+1)
visited = [False]*(N+1)
def dfs(x,lv):
if visited[x]:
return 0
visited[x]=True
size=1
level[x]=lv
for i in range(len(graph[x])):
next =graph[x][i]
size+=dfs(next,lv+1)
tsize[x]=size
return size
if ans[0]!=1:
print("0")
sys.exit(0)
else:
dfs(1,0)
for i in range(1,N):
x=ans[i]
if tsize[x] == 1 or i + tsize[x] >=N:
continue
next = ans[i+tsize[x]]
if level[next]>level[x]:
print(0)
sys.exit(0)
print(1)
Java
'코테용 문제풀이 > 백준' 카테고리의 다른 글
숨바꼭질 풀이 (0) | 2023.02.08 |
---|---|
다리 만들기 풀이 (0) | 2023.02.08 |
BFS 스페셜 저지 풀이 (0) | 2023.02.07 |
서울 지하철 2호선 풀이 (0) | 2023.02.07 |
Two Dots 풀이 (0) | 2023.02.07 |