fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long int
  3. #define endl "\n"
  4. using namespace std;
  5. const ll N = 2e5+10;
  6. const ll INF = 1e9+10;
  7. ll visited[N];
  8. vector<ll> graph[N];
  9. vector<ll> seq;
  10. ll n; vector<ll> given, a;
  11.  
  12. bool f(ll i, ll j) {
  13. return a[i] < a[j];
  14. }
  15. void bfs(ll start) {
  16. queue<ll> q;
  17. q.push(start);
  18. visited[start]=1;
  19. while(!q.empty()) {
  20. ll cur = q.front();
  21. seq.push_back(cur);
  22. q.pop();
  23. for(ll child: graph[cur]) {
  24. if(!visited[child]) {
  25. q.push(child);
  26. visited[child]=1;
  27. }
  28. }
  29. }
  30. }
  31.  
  32. int main() {
  33. ios_base::sync_with_stdio(false);
  34. cin.tie(0);
  35. cin>>n;
  36. given.resize(n);
  37. a.resize(n + 1);
  38. for(ll i=0;i<n-1;i++) {
  39. ll v1,v2;cin>>v1>>v2;
  40. graph[v1].push_back(v2);
  41. graph[v2].push_back(v1);
  42. }
  43. for(ll i=0;i<n;i++) {
  44. cin>>given[i];
  45. a[given[i]]=i;
  46. }
  47. for(ll i=1;i<=n;i++) {
  48. sort(graph[i].begin(),graph[i].end(),f);
  49. }
  50. bfs(1); (given==seq) ? cout << "YES" << endl : cout << "NO" << endl;
  51. }
Success #stdin #stdout 0.01s 8892KB
stdin
4
1 2
1 3
2 4
1 2 3 4
stdout
YES