#include <bits/stdc++.h>
#define debug(x) cerr << #x << " = " << x << endl
using namespace std;
const int N = 3e5 + 100;
int n, bj[N], a[N], wz[N];
vector<int> ans1, ans2;
vector<int> t[N];
void add(int a, int b) {
t[a].push_back(b);
}
void bfs() {
queue<int> q;
q.push(1);
while(q.size()) {
int head = q.front();
q.pop();
int x = head;
if(bj[x]) continue;
bj[x] = 1;
ans1.push_back(x);
for(int j = 0; j < t[x].size(); ++ j) {
int to = t[x][j];
q.push(to);
}
}
}
void solve()
{
scanf("%d", &n);
for(int i = 1; i <= n - 1; ++ i) {
int x, y;
scanf("%d%d", &x, &y);
add(x, y), add(y, x);
}
for(int i = 1; i <= n; ++ i) scanf("%d", &a[i]), wz[a[i]] = i;
for(int i = 1; i <= n; i ++) sort(t[i].begin(), t[i].end(), [&](int a, int b) {return wz[a] < wz[b];});
bfs();
int idx = 1;
for(int i = 0; i < ans1.size(); ++ i) {
if(ans1[i] == a[idx]) idx ++;
else {
puts("NO");
return;
}
}
puts("YES");
}
int main()
{
solve();
return 0;
}
Valid BFS?(根据输入改变bfs序 邻接表 + sort)
最新推荐文章于 2021-10-18 08:41:56 发布