【链接】
http://codeforces.com/problemset/problem/1037/D
【题意】
给你一棵树以及一个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");
}
}