제출 #1255349

#제출 시각아이디문제언어결과실행 시간메모리
1255349spampotsRegions (IOI09_regions)C++17
85 / 100
8069 ms29696 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pii> vpii; const int MOD = 1e9 + 7; const int INF = INT_MAX; const ll LINF = LLONG_MAX; #define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL) #define pb push_back #define mp make_pair #define fi first #define se second #define all(v) v.begin(), v.end() #define rep(i, a, b) for(int i = a; i < b; ++i) void solve() { int n, r, q; cin >> n >> r >> q; vector<vector<int>> adj(n); vector<vector<int>> c(r); vector<int> reg(n); cin >> reg[0]; reg[0]--; c[reg[0]].pb(0); for(int i = 1; i < n; i++){ int sk; cin >> sk >> reg[i]; sk--; reg[i]--; adj[sk].pb(i); c[reg[i]].pb(i); } int timer = 0; vector<int> tIn(n), tOut(n); function<void(int)> dfs = [&](int node) { tIn[node] = timer++; for(int x : adj[node]) dfs(x); tOut[node] = timer; }; dfs(0); vector<vector<int>> comp(r); for(int i = 0; i < n; ++i) comp[reg[i]].pb(tIn[i]); for(int i = 0; i < r; ++i) sort(all(comp[i])); for(int i = 0; i < q; ++i) { int r1, r2; cin >> r1 >> r2; r1--, r2--; int ans = 0; for(int x : c[r1]) { int l = tIn[x], r = tOut[x]-1; ans += upper_bound(all(comp[r2]), r) - lower_bound(all(comp[r2]), l); } cout << ans << endl; } } int main() { fast; int t = 1; while(t--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...