Submission #967547

#TimeUsernameProblemLanguageResultExecution timeMemory
96754712345678Regions (IOI09_regions)C++17
55 / 100
8090 ms24640 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=2e5+5;

int n, x, q, p, in[nx], out[nx], t, a, b;
vector<int> d[nx], r[nx];

struct fenwick
{
    int d[nx];
    void update(int i, int vl) {while (i<nx) d[i]+=vl, i+=(i&-i);}
    int query(int i)
    {
        int res=0;
        while (i>0) res+=d[i], i-=(i&-i);
        return res;
    }
} f;

void dfs(int u)
{
    in[u]=++t;
    for (auto v:d[u]) dfs(v);
    out[u]=t;
}

int main()
{
    cin>>n>>x>>q;
    cin>>x;
    r[x].push_back(1);
    for (int i=2; i<=n; i++) cin>>p>>x, d[p].push_back(i), r[x].push_back(i);
    dfs(1);
    while (q--)
    {
        cin>>a>>b;
        for (auto x:r[b]) f.update(in[x], 1);
        int res=0;
        for (auto x:r[a]) res+=f.query(out[x])-f.query(in[x]-1);
        for (auto x:r[b]) f.update(in[x], -1);
        cout<<res<<'\n';
        fflush(stdout);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...