Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- int n;
- vector<int> arr;
- vector<int> par;
- vector<bool> vis;
- vector<vector<int>> adj;
- void dfs(int p,int u)
- {
- par[u] = p;
- vis[u] = true;
- for(int v:adj[u])
- {
- if(!vis[v]) dfs(u,v);
- }
- }
- int main()
- {
- int t;
- cin>>t;
- int outs = 0;
- while(t--)
- {
- cin>>n;
- arr.assign(n, -1);
- par.assign(n, -1);
- vis.assign(n, false);
- adj.assign(n, vector<int>(0));
- for(int i=0;i<n-1;i++)
- {
- int u,v;
- cin>>u>>v;
- adj[u-1].push_back(v-1);
- adj[v-1].push_back(u-1);
- }
- dfs(-1,0);
- for(int i=0;i<n;i++)
- {
- cin>>arr[i];
- arr[i]--;
- }
- bool pos = true;
- for(int i=0;i<n-1;i++)
- {
- int a = arr[i];
- int b = arr[i+1];
- vector<int> path1,path2;
- int cur = a;
- for(int i=0;i<5;i++)
- {
- path1.push_back(cur);
- cur = par[cur];
- if(cur==-1) break;
- }
- cur = b;
- for(int i=0;i<5;i++)
- {
- path2.push_back(cur);
- cur = par[cur];
- if(cur==-1) break;
- }
- bool close = false;
- for(int i=0;i<path1.size();i++)
- {
- for(int j=0;j<path2.size();j++)
- {
- if(path1[i]==path2[j] && i+j<=3) close = true;
- }
- if(close) break;
- }
- if(!close)
- {
- pos = false;
- break;
- }
- }
- cout << pos << '\n';
- outs++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment