【codeforces 1037D】【驗證bfs序】【思維】
阿新 • • 發佈:2018-12-09
【連結】
【題意】
給你一棵樹以及一個bfs序,問是否存在這個bfs序
【思路】
從給定的bfs序入手考慮
【程式碼】
#include<bits./stdc++.h> #define ll long long using namespace std; const int maxn = 1e6 + 5; vector<int>v[maxn]; int a[maxn]; map<int, bool>mp[maxn]; int n; int bfs(void) { int cnt = 1; queue<int>q; if (a[cnt] != 1)return 0; q.push(a[cnt]); cnt++; while (q.size()) { int u = q.front(); q.pop(); int v = a[cnt]; while (mp[u][v]) { q.push(v); cnt++; v = a[cnt]; } } return cnt == (n + 1); } int main() { scanf("%d", &n); for (int i = 1; i < n; i++) { int x, y; scanf("%d%d", &x, &y); mp[x][y] = mp[y][x] = 1; } for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } if (bfs()) { printf("Yes\n"); } else { printf("No\n"); } }