16964번: DFS 스페셜 저지

첫째 줄에 정점의 수 N(2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에는 트리의 간선 정보가 주어진다. 마지막 줄에는 DFS 방문 순서가 주어진다. DFS 방문 순서는 항상 N개의 정수로 이루

www.acmicpc.net

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> a[100000];
bool check[100000];
vector<int> dfs_order;
void dfs(int x) {
    if (check[x]) return;
    dfs_order.push_back(x);
    check[x] = true;
    for (int y : a[x]) {
        dfs(y);
    }
}
int main() {
    int n;
    cin >> n;
    for (int i=0; i<n-1; i++) {
        int u, v;
        cin >> u >> v;
        u -= 1; v -= 1;
        a[u].push_back(v);
        a[v].push_back(u);
    }
    vector<int> b(n);
    vector<int> order(n);
    for (int i=0; i<n; i++) {
        cin >> b[i];
        b[i] -= 1;
        order[b[i]] = i;
    }
    for (int i=0; i<n; i++) {
        sort(a[i].begin(), a[i].end(), [&](const int &u, const int &v) {
            return order[u] < order[v];
        });
    }
    dfs(0);
    if (dfs_order == b) {
        cout << 1 << '\n';
    } else {
        cout << 0 << '\n';
    }
    return 0;
}

'Problem set' 카테고리의 다른 글

[백준] 1697 숨바꼭질  (0) 2021.02.20
[백준] 2146 다리 만들기  (0) 2021.02.20
[백준] 16940 BFS 스페셜 저지  (0) 2021.02.20
[백준] 7562 나이트의 이동  (0) 2021.02.20
[백준] 7576 토마토  (0) 2021.02.20
복사했습니다!