#include <bits/stdc++.h>
#define DIM 200010
#define INF 2000000000
using namespace std;
vector <int> L[DIM],v[DIM];
int E[DIM],c[DIM];
pair <int,int> poz[DIM];
map <pair<int,int>,int> mp;
int n,r,q,i,x,r1,r2,k;
void dfs (int nod, int tata){
E[++k] = nod;
poz[nod].first = k;
for (auto vecin : L[nod]){
if (vecin != tata)
dfs (vecin,nod);
}
poz[nod].second = k;
}
int main (){
//ifstream cin ("date.in");
//ofstream cout ("date.out");
cin>>n>>r>>q;
cin>>c[1];
for (i=2;i<=n;i++){
cin>>x>>c[i];
L[x].push_back(i);
L[i].push_back(x);
}
dfs (1,0);
for (i=1;i<=k;i++){
int nod = E[i];
v[c[nod]].push_back(nod);
}
int val = sqrt(n);
for (i=1;i<=r;i++){
if (v[i].size() < val)
continue;
for (r2=1;r2<=r;r2++){
int sol = 0;
for (auto it : v[i]){
/// cate noduri de cu regiunea r2 sunt in subarborele asta
int x = poz[it].first, y = poz[it].second;
int st = 0, dr = v[r2].size()-1, sol_st = INF;
while (st <= dr){
int mid = (st+dr)>>1;
if (poz[v[r2][mid]].first >= x){
sol_st = mid;
dr = mid-1;
} else st = mid+1;
}
st = 0, dr = v[r2].size()-1; int sol_dr = -1;
while (st <= dr){
int mid = (st+dr)>>1;
if (poz[v[r2][mid]].first <= y){
sol_dr = mid;
st = mid+1;
} else dr = mid-1;
}
if (sol_st <= sol_dr)
sol += sol_dr - sol_st + 1;
}
mp[make_pair(i,r2)] = sol;
}
}
/// vreau sa vad cat de prost merge asta
for (;q--;){
cin>>r1>>r2;
if (v[r1].size() >= val){
cout<<mp[make_pair(r1,r2)]<<endl;
continue;
}
int sol = 0;
for (auto it : v[r1]){
/// cate noduri de cu regiunea r2 sunt in subarborele asta
int x = poz[it].first, y = poz[it].second;
int st = 0, dr = v[r2].size()-1, sol_st = INF;
while (st <= dr){
int mid = (st+dr)>>1;
if (poz[v[r2][mid]].first >= x){
sol_st = mid;
dr = mid-1;
} else st = mid+1;
}
st = 0, dr = v[r2].size()-1; int sol_dr = -1;
while (st <= dr){
int mid = (st+dr)>>1;
if (poz[v[r2][mid]].first <= y){
sol_dr = mid;
st = mid+1;
} else dr = mid-1;
}
if (sol_st <= sol_dr)
sol += sol_dr - sol_st + 1;
}
cout<<sol<<endl;
}
return 0;
}
Compilation message
regions.cpp: In function 'int main()':
regions.cpp:44:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (v[i].size() < val)
~~~~~~~~~~~~^~~~~
regions.cpp:88:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (v[r1].size() >= val){
~~~~~~~~~~~~~^~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
9728 KB |
Output is correct |
2 |
Correct |
10 ms |
9728 KB |
Output is correct |
3 |
Correct |
14 ms |
9728 KB |
Output is correct |
4 |
Correct |
14 ms |
9728 KB |
Output is correct |
5 |
Correct |
18 ms |
9728 KB |
Output is correct |
6 |
Correct |
29 ms |
9856 KB |
Output is correct |
7 |
Correct |
35 ms |
9856 KB |
Output is correct |
8 |
Correct |
43 ms |
9856 KB |
Output is correct |
9 |
Correct |
61 ms |
10240 KB |
Output is correct |
10 |
Correct |
99 ms |
10240 KB |
Output is correct |
11 |
Correct |
136 ms |
10616 KB |
Output is correct |
12 |
Correct |
162 ms |
11136 KB |
Output is correct |
13 |
Correct |
189 ms |
11008 KB |
Output is correct |
14 |
Correct |
299 ms |
11384 KB |
Output is correct |
15 |
Correct |
310 ms |
13692 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2470 ms |
14676 KB |
Output is correct |
2 |
Correct |
2711 ms |
14200 KB |
Output is correct |
3 |
Correct |
3608 ms |
16376 KB |
Output is correct |
4 |
Correct |
293 ms |
11516 KB |
Output is correct |
5 |
Correct |
405 ms |
12920 KB |
Output is correct |
6 |
Correct |
2581 ms |
39416 KB |
Output is correct |
7 |
Correct |
3478 ms |
45320 KB |
Output is correct |
8 |
Correct |
5307 ms |
81312 KB |
Output is correct |
9 |
Correct |
2552 ms |
18912 KB |
Output is correct |
10 |
Runtime error |
5781 ms |
131076 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
11 |
Correct |
4500 ms |
21232 KB |
Output is correct |
12 |
Correct |
5252 ms |
22116 KB |
Output is correct |
13 |
Correct |
5826 ms |
22776 KB |
Output is correct |
14 |
Execution timed out |
8084 ms |
44212 KB |
Time limit exceeded |
15 |
Execution timed out |
8016 ms |
27428 KB |
Time limit exceeded |
16 |
Execution timed out |
8016 ms |
32900 KB |
Time limit exceeded |
17 |
Execution timed out |
8068 ms |
54512 KB |
Time limit exceeded |