Submission #867746

#TimeUsernameProblemLanguageResultExecution timeMemory
867746overwatch9Regions (IOI09_regions)C++17
24 / 100
8093 ms131072 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
vector <vector <int>> adj;
vector <int> col;
vector <vector <int>> ans;
int n, r, q;
vector <int> dfs(int s, int p, int r1, int x) {
    vector <int> tp(r+1);
    tp[col[s]] += x;
    for (auto i : adj[s]) {
        if (i == p)
            continue;
        vector <int> res;
        if (col[s] == r1)
            res = dfs(i, s, r1, x+1);
        else
            res = dfs(i, s, r1, x);
        for (int j = 1; j <= r; j++)
            tp[j] += res[j];
    }
    return tp;
}
int main() {
    cin >> n >> r >> q;
    col = vector <int> (n+1);
    adj.resize(n+1);
    ans.resize(n+1);
    cin >> col[1];
    for (int i = 2; i <= n; i++) {
        int p, c;
        cin >> p >> c;
        adj[i].push_back(p);
        adj[p].push_back(i);
        col[i] = c;
    }
    for (int i = 1; i <= r; i++) {
        ans[i] = dfs(1, 1, i, 0);
    }
    while (q--) {
        int r1, r2;
        cin >> r1 >> r2;
        cout << ans[r1][r2] << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...