-
백준 dfs 스페셜 저지PS 2020. 4. 10. 01:37
https://www.acmicpc.net/problem/16964
16964번: DFS 스페셜 저지
첫째 줄에 정점의 수 N(2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에는 트리의 간선 정보가 주어진다. 마지막 줄에는 DFS 방문 순서가 주어진다. DFS 방문 순서는 항상 N개의 정수로 이루어져 있으며, 1부터 N까지 자연수가 한 번씩 등장한다.
www.acmicpc.net
<접근방법>
dfs로 방문할 수 있는지의 여부를 묻는 문제입니다.
다음 정점으로 이동할 때, 주어진 순서대로 갈 수 있으면 이동하고 마지막 정점에 도착하면
성공했다고 표시해줍니다.
<느낀 점>
<코드>
#include <iostream> #include <algorithm> #include <vector> using namespace std; const int MAX = 100000; int n, a[MAX + 1]; bool visit[MAX + 1]; int idx = 1; bool suc; vector<int> e[MAX+1]; void dfs(int dep, int now) { if (idx == n) { suc = true; return; } if (visit[now]) return; visit[now] = true; for (int i = 0; i < e[now].size(); i++) { int next = e[now][i]; if (!visit[next]) { if (next == a[idx]) { idx++; dfs(dep+1, next); i = -1; } } } } int main() { cin >> n; for (int i = 0, a, b; i < n-1; i++) { cin >> a >> b; e[a].push_back(b); e[b].push_back(a); } for (int i = 0; i < n; i++) { cin >> a[i]; } dfs(0, 1); if (suc) cout << 1 << '\n'; else cout << 0 << '\n'; return 0; }
반응형'PS' 카테고리의 다른 글
백준 20061번 모노미도미노2 (0) 2021.01.28 백준 16929번 Two Dots (0) 2020.04.14 백준 16973번 직사각형 탈출 (0) 2020.04.08 백준 16940번 BFS 스페셜 저지 (0) 2020.04.08 백준 16957번 체스판 위의 공 (0) 2020.03.24