fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAXN = 1e4 + 15;
  5.  
  6. int N, M;
  7.  
  8. struct dosu {
  9. int root[MAXN], sz[MAXN];
  10. void INIT() {
  11. for (int i = 1; i <= N; i++) root[i] = i;
  12. }
  13.  
  14. int find_set(int u) {
  15. return (root[u] == u ? u : root[u] = find_set(root[u]));
  16. }
  17.  
  18. void union_set(int u, int v) {
  19. u = find_set(u), v = find_set(v);
  20. if (u == v) return;
  21. if (sz[u] < sz[v]) swap(u, v);
  22. root[v] = root[u];
  23. sz[u] += sz[v];
  24. }
  25. } DSU;
  26.  
  27.  
  28. main() {
  29. ios_base::sync_with_stdio(0);
  30. cin.tie(0);
  31.  
  32. cin >> N >> M;
  33. DSU.INIT();
  34. for (int i = 2; i <= N; i++) {
  35. int v, w;
  36. cin >> v >> w;
  37. if (w == 2) continue;
  38. DSU.union_set(i, v);
  39. }
  40.  
  41.  
  42. while (M--) {
  43. int u, v;
  44. cin >> u >> v;
  45. if (DSU.find_set(u) == DSU.find_set(v)) cout << "NO\n";
  46. else cout << "YES\n";
  47. }
  48. }
  49.  
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout
Standard output is empty