Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define mp make_pair
- #define pb push_back
- #define f first
- #define s second
- #define MOD 1000000007
- #define PI 3.14159265
- #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
- ll max(ll a,ll b)
- {
- if(a>b)
- return a;
- return b;
- }
- ll min(ll a,ll b)
- {
- return a+b-max(a,b);
- }
- ll mod(ll a,ll b)
- {
- if(a>b)
- return a-b;
- else
- return b-a;
- }
- ll power(ll x,ll y, ll p)
- {
- ll res = 1;
- x = x % p;
- while (y > 0)
- {
- if (y & 1)
- res = (res*x)%p;
- y = y>>1;
- x = (x*x)%p;
- }
- return res;
- }
- ll dist[200005];
- ll maxdist=0;
- void dfs(list<ll> g[],ll s,vector<bool> &visited)
- {
- visited[s]=true;
- for(auto it:g[s])
- if(!visited[it])
- {
- dist[it]=1+dist[s];
- maxdist=max(maxdist,dist[it]);
- dfs(g,it,visited);
- }
- }
- int main()
- {
- fastio;
- ll n;
- cin>>n;
- ll x,y;
- list<ll> g[n+5];
- for(ll i=0;i<n-1;i++)
- {
- cin>>x>>y;
- g[x].pb(y);
- g[y].pb(x);
- }
- memset(dist,0,sizeof(dist));
- vector<bool> visited(n+5,false);
- dfs(g,1,visited);
- vector<ll> alls[n+5];
- for(ll i=1;i<=n;i++)
- alls[dist[i]].pb(i);
- ll arr[n+5];
- for(ll i=0;i<n;i++)
- cin>>arr[i];
- ll arr1[n+5];
- ll tot=0;
- for(ll i=0;i<=maxdist;i++)
- {
- ll ctr=0;
- for(ll j=tot;j<tot+alls[i].size();j++)
- {
- arr1[ctr]=arr[j];
- ctr++;
- }
- sort(arr1,arr1+alls[i].size());
- for(ll j=0;j<alls[i].size();j++)
- if(arr1[j]!=alls[i][j])
- {
- cout<<"No";
- return 0;
- }
- tot+=alls[i].size();
- }
- cout<<"Yes";
- }
Add Comment
Please, Sign In to add comment