fork(3) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.  
  6. int n,m,x,y,i,flag=0,r,u;
  7. scanf("%d",&n);
  8. int arr[n+9],parent[n+9];
  9.  
  10.  
  11. vector<vector<int> >adj(n+1);
  12. vector<int>::iterator it;
  13. for(i=0;i<n-1;i++)
  14. {
  15. scanf("%d %d",&x,&y);
  16. adj[x].push_back(y);
  17. adj[y].push_back(x);
  18. }
  19.  
  20. for(i=0;i<n;i++)
  21. {scanf("%d",&arr[i]);
  22. if(n==200000)
  23. {
  24. cout<<arr[i]<<" ";
  25. }
  26. }
  27.  
  28. bool visited[n];
  29. queue<int>myqueue;
  30. queue<int>q;
  31. int s=1;
  32. int level[100009];
  33. level[s]=0;
  34. parent[s]=0;
  35. for(i=1;i<=n;i++)
  36. {
  37. visited[i]=false;
  38. }
  39. myqueue.push(s);
  40. visited[s]=true;
  41. while(!myqueue.empty())
  42. {
  43. s=myqueue.front();
  44. myqueue.pop();
  45. for(it=adj[s].begin();it<adj[s].end();it++)
  46. {
  47. if(visited[*it]==false)
  48. {
  49. visited[*it]=true;
  50. level[*it]=level[s]+1;
  51. parent[*it]=s;
  52. myqueue.push(*it);
  53. }
  54. }
  55.  
  56.  
  57. }
  58.  
  59. q.push(1);
  60. r=q.front();
  61. u=2;
  62. for(i=1;i<n;i++)
  63. {
  64. if(i-u==adj[r].size()-1)
  65. {
  66. q.pop();
  67.  
  68. r=q.front();
  69. u=i;
  70. }
  71.  
  72. if(parent[arr[i]]!=r )
  73. {
  74. flag=1;
  75. break;
  76. }
  77.  
  78.  
  79.  
  80. if(parent[arr[i]]==r && adj[arr[i]].size()>1)
  81. q.push(arr[i]);
  82.  
  83.  
  84. }
  85. if(flag==1)
  86. cout<<"No";
  87. else
  88. cout<<"Yes";
  89.  
  90.  
  91. }
Runtime error #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Standard output is empty