Submission #525628

#TimeUsernameProblemLanguageResultExecution timeMemory
525628Aldas25Regions (IOI09_regions)C++14
29 / 100
1274 ms31792 KiB
#include <bits/stdc++.h> using namespace std; #define FAST_IO ios_base::sync_with_stdio(0); cin.tie(0) #define FOR(i, a, b) for(int i = (a); i <= (b); i++) #define REP(n) FOR(O, 1, (n)) #define pb push_back #define f first #define s second typedef long double ld; typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<pii> vii; //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int MAXN = 250100, MAXK = 20; const ll MOD = 1e9+7; const ll C = 500; const ll c = 0; int n, r, q; int h[MAXN]; int regSz[MAXN]; bool bgReg[MAXN]; vi adj[MAXN]; ll pref[25100]; int regToId[MAXN]; int idToReg[MAXN]; int tin[MAXN], tout[MAXN]; int crT = 0; ll ans1[C][25100]; ll ans2[C][25100]; void dfs (int v, int p = -1) { tin[v] = ++crT; FOR(i, 0, C-1) { ans1[i][h[v]] += pref[idToReg[i]]; //ans2[i][h[v]] += pref[h[v]]; } if (bgReg[h[v]]) { FOR(i, 1, r) ans2[regToId[h[v]]][i] += pref[i]; } pref[h[v]]++; for (int u : adj[v]) { dfs (u, v); } pref[h[v]]--; tout[v] = crT; } bool isAnc (int a, int b) { return (tin[a] <= tin[b] && tout[b] <= tout[a]); } ll r1Big (int r1, int r2) { return ans1[regToId[r1]][r2]; } ll r2Big (int r1, int r2) { return ans2[regToId[r2]][r1]; } int main() { FAST_IO; cin >> n >> r >> q; cin >> h[1]; FOR(i, 2, n) { int pr; cin >> pr; adj[pr].pb(i); cin >> h[i]; } FOR(i, 1, n) regSz[h[i]]++; int lstId = 0; FOR(i, 1, r) { bgReg[i] = (regSz[i] > c); if (bgReg[i]) { regToId[i] = ++lstId; idToReg[lstId] = i; } // cout << " i = " << i << " regSz = " << regSz[i] << " bg = " << bgReg[i] << endl; // if (bgReg[i]) cout << " regToId[i]=" << regToId[i] << endl; } dfs(1); REP(q) { int r1, r2; cin >> r1 >> r2; if(bgReg[r1]) cout << r1Big(r1, r2) << endl; else if (bgReg[r2]) cout << r2Big(r1, r2) << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...