设立一个order队列 记录题给的顺序 然后进行BFS 若能完成BFS操作则输出yes 否则输出no
#include<bitset>
#include<map>
#include<vector>
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
#include<set>
#define bye return 0
using namespace std;
#define mem(a) memset(a,0,sizeof(a));
typedef long long ll;
const int maxn = 2 * 1e5 + 5;
int n;
bool vis[maxn];
queue<int>order, q;
vector<int>g[maxn];
int bfs()
{
q.push(1);
order.pop();
set<int>set;
while (!q.empty())
{
int u = q.front();
q.pop();
vis[u] = true;
for (const auto &v : g[u])
{
if (!vis[v]) set.insert(v);
}
while (!set.empty())
{
if (set.count(order.front()))
{
set.erase(order.front());
q.push(order.front());
order.pop();
}
else return 0 * puts("No");
}
}
return 0 * puts("Yes");
}
void solution()
{
int n;
cin >> n;
for (int i = 2;i <= n;i++)
{
int u, v;
scanf("%d %d", &u, &v);
g[u].push_back(v), g[v].push_back(u);
}
for (int i = 1;i <= n;i++)
{
int x;
scanf("%d", &x);
order.push(x);
}
if (order.front() != 1) puts("No"), exit(0);
bfs();
}
int main()
{
solution();
}