Submission #881690

#TimeUsernameProblemLanguageResultExecution timeMemory
881690sheldonRegions (IOI09_regions)C++14
0 / 100
64 ms30792 KiB
#include <bits/stdc++.h> using namespace std; const int nax = 2e5 + 5; int region[nax]; vector<int> edges[nax], positions[nax]; int tin[nax], tout[nax], who[nax]; int timer = 0; unordered_map<int, int> mp[25005]; void dfs (int u, int p) { tin[u] = ++timer; who[timer] = u; positions[region[u]].push_back(timer); for (int v : edges[u]) { if (v != p) { dfs (v, u); } } tout[u] = timer; } void solve() { int n, r, q; cin >> n >> r >> q; cin >> region[1]; for (int i = 2; i <= n; ++i) { int p; cin >> p >> region[i]; edges[i].push_back(p); edges[p].push_back(i); } dfs (1, 0); const int B = sqrt(n) + 5; // for (int reg = 1; reg <= r; ++reg) { // if (positions[reg].size() >= B) { // vector<int> pref(n + 2); // for (int i = 1; i <= n; ++i) { // if (region[who[i]] == reg) { // pref[i + 1]++; // pref[tout[who[i]] + 1]--; // } // } // for (int i = 1; i <= n; ++i) { // pref[i] += pref[i - 1]; // mp[reg][region[who[i]]] += pref[i]; // } // } // } // while (q--) { // int reg1, reg2; // cin >> reg1 >> reg2; // if (positions[reg1].size() >= B) { // cout << mp[reg1][reg2] << endl; // } else { // int ans = 0; // for (int i : positions[reg1]) { // if (region[who[i]] == reg1) { // auto it1 = upper_bound(positions[reg2].begin(), positions[reg2].end(), tout[who[i]]) - positions[reg2].begin(); // auto it2 = lower_bound(positions[reg2].begin(), positions[reg2].end(), i) - positions[reg2].begin(); // if (it1 != 0) { // ans += (int) it1 - it2; // } // } // } // cout << ans << endl; // } // } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }

Compilation message (stderr)

regions.cpp: In function 'void solve()':
regions.cpp:36:15: warning: unused variable 'B' [-Wunused-variable]
   36 |     const int B = sqrt(n) + 5;
      |               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...