Advertisement
ivnikkk

Untitled

May 22nd, 2022 (edited)
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define debug(l) cerr<<#l<<' '<<l<<'\n';
  3. #include "bits/stdc++.h"
  4. using namespace std;
  5. #define all(a) a.begin(), a.end()
  6. typedef long long ll;
  7. typedef pair<ll, ll> pll;
  8. typedef pair<int, int> pii;
  9. typedef long double ld;
  10. vector<vector<int>> gr;
  11. vector<int> d;
  12. vector<vector<pii>> query;
  13. void dfs(int v, int p) {
  14.     if (p == -1) d[v] = 0;
  15.     else d[v] = d[p] + 1;
  16.     for (int& u : gr[v]) {
  17.         if (u != p) {
  18.             dfs(u, v);
  19.         }
  20.     }
  21. }
  22. vector<map<int, int>> dists;
  23. vector<int> ans;
  24. void dfs2(int v, int p) {
  25.     dists[v][d[v]]++;
  26.     for (int& u : gr[v]) {
  27.         if (u != p) {
  28.             dfs2(u, v);
  29.             if (dists[v].size() < dists[u].size()) {
  30.                 dists[v].swap(dists[u]);
  31.             }
  32.             for (auto& j : dists[u]) {
  33.                 dists[v][j.first] += j.second;
  34.             }
  35.             dists[u].clear();
  36.         }
  37.     }
  38.     for (auto&& [h, ind] : query[v]) {
  39.         ans[ind] = dists[v][ h + d[v] ];
  40.     }
  41. }
  42. signed main() {
  43. #ifdef _DEBUG
  44.     freopen("input.txt", "r", stdin);
  45.     freopen("output.txt", "w", stdout);
  46. #endif
  47.     ios_base::sync_with_stdio(false);
  48.     cin.tie(nullptr);
  49.     cout.tie(nullptr);
  50.     int n;
  51.     cin >> n;
  52.     gr.resize(n);
  53.     d.resize(n);
  54.     dists.resize(n);
  55.     query.resize(n);
  56.     for (int i = 1; i < n; i++) {
  57.         int x;
  58.         cin >> x;
  59.         x--;
  60.         gr[i].push_back(x);
  61.         gr[x].push_back(i);
  62.     }
  63.     dfs(0, -1);
  64.     int q;
  65.     cin >> q;
  66.     ans.resize(q);
  67.     for (int i = 0; i < q; i++) {
  68.         int v, h;
  69.         cin >> v >> h;
  70.         v--;
  71.         query[v].push_back({ h,i });
  72.     }
  73.     dfs2(0, -1);
  74.     for (int& i : ans) {
  75.         cout << i << '\n';
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement