Submission #627300

#TimeUsernameProblemLanguageResultExecution timeMemory
627300clamsRegions (IOI09_regions)C++17
30 / 100
846 ms45468 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 5;
const int R = 25e3 + 5;
const int Q = 2e5 + 5;

int n, r, q;
int home[N], par[N];
vector<int> adj[N];

const int R1 = 505;

map<int, int> mp[N];
int pre[R1][R1];

void dfs(int u, int p) {
    for (int v : adj[u]) {
        if (v == p) continue;

        dfs(v, u);

        if (mp[u].size() < mp[v].size()) swap(mp[u], mp[v]);
        for (auto i : mp[v]) mp[u][i.first] += i.second;
    }
    for (auto i : mp[u]) {
        pre[home[u]][i.first] += i.second;
    }
    mp[u][home[u]]++;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> r >> q;

    cin >> home[1];
    for (int i = 2; i <= n; i++) {
        cin >> par[i] >> home[i];
        adj[par[i]].push_back(i);
        adj[i].push_back(par[i]);
    }

    if (r < R1) {
        dfs(1, 0);

        while (q--) {
            int r1, r2;
            cin >> r1 >> r2;

            cout << pre[r1][r2] << endl;
        }
    } else {
        assert(false);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...