Submission #867740

#TimeUsernameProblemLanguageResultExecution timeMemory
867740overwatch9Regions (IOI09_regions)C++17
13 / 100
876 ms131072 KiB
#include <iostream> #include <vector> #include <algorithm> #include <map> using namespace std; vector <vector <int>> adj; vector <int> col; vector <map <int, int>> freq; vector <vector <int>> regions; map <int, int> dfs(int s, int p) { map <int, int> tp; tp[col[s]] = 1; for (auto i : adj[s]) { if (i == p) continue; auto res = dfs(i, s); if (tp.size() < res.size()) swap(res, tp); for (auto j : res) tp[j.first] += j.second; } freq[s] = tp; return tp; } int main() { int n, r, q; cin >> n >> r >> q; col = vector <int> (n+1); adj.resize(n+1); regions.resize(r+1); freq.resize(n+1); cin >> col[1]; regions[col[1]].push_back(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; regions[c].push_back(i); } dfs(1, 1); while (q--) { int r1, r2; cin >> r1 >> r2; int ans = 0; for (auto i : regions[r1]) { ans += freq[i][r2]; } cout << ans << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...