Submission #1026965

#TimeUsernameProblemLanguageResultExecution timeMemory
1026965daisy2Regions (IOI09_regions)C++17
65 / 100
8063 ms131072 KiB
#include<bits/stdc++.h> #include<set> #include<cmath> #include<vector> using namespace std; int n, chair, q, tim = 0, in[200005], out[200005], rper[200005], reg, a, b; vector<int> v[200005], perr[200005]; map<int, int> dp[25000]; multiset<int> d[500005]; void dfs(int vr) { tim++; in[vr] = tim; d[rper[vr]].insert(in[vr]); for (int i = 0; i < v[vr].size(); i++) dfs(v[vr][i]); out[vr] = tim; } void dfs2(int vr, int cntim, int curr) { if (rper[vr] == curr) cntim++; else dp[curr][rper[vr]] += cntim; for (int i = 0; i < v[vr].size(); i++) dfs2(v[vr][i], cntim, curr); } int main() { cin >> n >> reg >> q; cin >> chair; rper[1] = chair; perr[chair].push_back(1); int sup, regper; for (int i = 2; i <= n; i++) { cin >> sup >> regper; v[sup].push_back(i); rper[i] = regper; perr[regper].push_back(i); } dfs(1); int k = sqrt(n); for (int i = 1; i <= reg; i++) { if (d[i].size() >= k) { dfs2(1, 0, i); } } while (q--) { cin >> a >> b; if (d[a].size() >= k) { cout << dp[a][b] << endl; } else { int res = 0; for (int i = 0; i < perr[a].size(); i++) { res += distance(d[b].lower_bound(in[perr[a][i]]), d[b].upper_bound(out[perr[a][i]])); } cout << res << endl; } cout.flush(); } }

Compilation message (stderr)

regions.cpp: In function 'void dfs(int)':
regions.cpp:17:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |     for (int i = 0; i < v[vr].size(); i++)
      |                     ~~^~~~~~~~~~~~~~
regions.cpp: In function 'void dfs2(int, int, int)':
regions.cpp:27:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for (int i = 0; i < v[vr].size(); i++)
      |                     ~~^~~~~~~~~~~~~~
regions.cpp: In function 'int main()':
regions.cpp:49:25: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   49 |         if (d[i].size() >= k) {
      |             ~~~~~~~~~~~~^~~~
regions.cpp:55:25: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   55 |         if (d[a].size() >= k) {
      |             ~~~~~~~~~~~~^~~~
regions.cpp:59:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             for (int i = 0; i < perr[a].size(); i++) {
      |                             ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...