Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 2e5 + 10;
- vector<int> adj[N];
- int pr[N], color[N];
- void DFS(int u, int p, int prv, int cur){
- color[u] = cur;
- for(int v : adj[u]){
- if(v == p){
- continue;
- }
- if(color[v] == prv){
- DFS(v, u, prv, cur);
- }
- }
- }
- int main(){
- int nVertex, Q;
- scanf("%d%d", &nVertex, &Q);
- pr[1] = 0;
- int colorCnt = 0;
- color[1] = ++colorCnt;
- for(int u = 2; u <= nVertex; ++u){
- scanf("%d", &pr[u]);
- adj[u].push_back(pr[u]);
- adj[pr[u]].push_back(u);
- color[u] = colorCnt;
- }
- while(Q--){
- int u, v, cmd;
- scanf("%d%d%d", &u, &v, &cmd);
- int cut = 0;
- if(color[u] == color[v]){
- cout << "YES\n";
- cut = u;
- } else {
- cout << "NO\n";
- cut = v;
- }
- if(cmd == 0 || color[cut] != color[pr[cut]]){
- continue;
- }
- DFS(cut, pr[cut], color[cut], ++colorCnt);
- }
- return 0;
- }
- v
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement