Submission #641307

#TimeUsernameProblemLanguageResultExecution timeMemory
641307CookieRegions (IOI09_regions)C++14
35 / 100
4849 ms97492 KiB
#include<bits/stdc++.h> using namespace std; #include<fstream> #define ll long long #define vt vector #define pb push_back #define fi first #define se second #define forr(i, a, b) for(int i = a; i < b; i++) #define dorr(i, a, b) for(int i = a; i >= b; i--) typedef unsigned long long ull; #define pii pair<int, int> #define pll pair<ll, ll> #include<fstream> ifstream fin("milkorder.in"); ofstream fout("milkorder.out"); const ll mod = 1e9 + 7; const int mxn = 2e5, mxr = 25e3, sq = 446; int n, r, q, t = 0; vt<int>adj[mxn + 1], ob[mxn + 1]; vt<int>reg[mxr + 3]; int in[mxn + 1], out[mxn + 1], color[mxn + 1], h[mxn + 1]; map<int, int>mp[mxr + 1]; void dfs(int s){ in[s] = ++t; color[t] = h[s]; for(auto i: adj[s]){ dfs(i); } out[s] = t; } void dfs2(int co, int s, int cnt){ for(auto i: adj[s]){ mp[co][h[i]] += cnt; dfs2(co, i, cnt + (h[i] == cnt)); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> r >> q; cin >> h[1]; reg[h[1]].pb(1); forr(i, 2, n + 1){ int v; cin >> v >> h[i]; reg[h[i]].pb(i); adj[v].pb(i); } for(int i = 1; i <= r; i++){ if(reg[i].size() >= sq){ dfs2(i, 1, (h[1] == i)); } } dfs(1); forr(i, 1, n + 1)ob[color[i]].pb(i); for(int i = 0; i < q; i++){ int r1, r2; cin >> r1 >> r2; if(reg[r1].size() >= sq){ cout << mp[r1][r2] << endl; }else{ int ans = 0; for(auto j: reg[r1]){ ans += upper_bound(ob[r2].begin(), ob[r2].end(), out[j]) - lower_bound(ob[r2].begin(), ob[r2].end(), in[j]); } cout << ans << endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...