#include<bits/stdc++.h>
using namespace std;
int n,m,q;
int dp[100005][20];
int lv[100005];
vector<int>v[100005];
vector<long long>cp[100005];
map<pair<int,int>,int>mp;
vector<long long>vl;
struct pstree{
struct node{
node *l,*r;
long long val;
int cnt;
node(long long x=0){
val=x;
cnt=0;
l=r=NULL;
}
};
typedef node* pnode;
pnode root[100005];
long long getval(pnode x){
return x?x->val:0;
}
long long getcnt(pnode x){
return x?x->cnt:0;
}
void build(int st,int en,pnode &x){
x=new node();
if(st==en)return;
int m=(st+en)/2;
build(st,m,x->l);
build(m+1,en,x->r);
}
void init(){
build(1,m,root[0]);
}
void upd(int st,int en,pnode &x,int pos,long long val,pnode k){
x=new node(*k);
if(st==en){
x->val+=val;
x->cnt++;
return;
}
int m=(st+en)/2;
if(pos<=m){
upd(st,m,x->l,pos,val,k->l);
}else{
upd(m+1,en,x->r,pos,val,k->r);
}
x->val=getval(x->l)+getval(x->r);
x->cnt=getcnt(x->l)+getcnt(x->r);
}
int fkval(int st,int en,pnode x,pnode y,pnode l,long long val,int cnt){
if(st==en){
long long ad=val/vl[st-1];
ad=min(ad,getcnt(x)+getcnt(y)-2*getcnt(l));
return cnt+ad;
}
//cerr<<st<<" "<<en<<" "<<x->val<<" "<<y->val<<" "<<l->val<<endl;
long long sum=getval(x->l)+getval(y->l)-2*getval(l->l);
//cerr<<"sum,val "<<sum<<" "<<val<<endl;
int m=(st+en)/2;
if(sum>=val){
return fkval(st,m,x->l,y->l,l->l,val,cnt);
}else{
//cerr<<m+1<<" "<<en<<" "<<x->r<<" "<<y->r<<" "<<val-sum<<" "<<cnt+getcnt(x->l)+getcnt(y->l)-2*getcnt(l->l)<<endl;
return fkval(m+1,en,x->r,y->r,l->r,val-sum,cnt+getcnt(x->l)+getcnt(y->l)-2*getcnt(l->l));
}
}
}pst;
void dfs(int x,int p){
lv[x]=lv[p]+1;
dp[x][0]=p;
pair<int,int>pp={x,p};
int np=mp[{x,p}];
pst.root[x]=pst.root[p];
//cerr<<"x:"<<x<<" "<<np<<endl;
for(int i=0;i<cp[np].size();i++){
//cerr<<cp[np][i]<<" ";
int pos=lower_bound(vl.begin(),vl.end(),cp[np][i])-vl.begin()+1;
pst.upd(1,m,pst.root[x],pos,cp[np][i],pst.root[x]);
}
//cerr<<endl;
//cout<<x<<" "<<pst.root[x]<<endl;
for(int i=1;i<20;i++){
dp[x][i]=dp[dp[x][i-1]][i-1];
}
for(int i=0;i<v[x].size();i++){
if(v[x][i]!=p)dfs(v[x][i],x);
}
}
int lca(int a,int b){
//cerr<<"finding lca "<<a<<" "<<b<<endl;
if(lv[b]>lv[a])swap(a,b);
//cerr<<lv[a]<<" "<<lv[b]<<endl;
for(int i=19;i>=0;i--)if(lv[dp[a][i]]>=lv[b])a=dp[a][i];
//cerr<<"change lv:"<<" "<<a<<" "<<b<<endl;
if(a==b)return a;
for(int i=19;i>=0;i--)if(dp[a][i]!=dp[b][i])a=dp[a][i],b=dp[b][i];
//cerr<<"bf lca"<<a<<" "<<b<<endl;
return dp[a][0];
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m>>q;
for(int i=1;i<=n-1;i++){
int a,b;
cin>>a>>b;
v[b].push_back(a);
v[a].push_back(b);
mp[{a,b}]=i;
mp[{b,a}]=i;
}
for(int i=0;i<m;i++){
long long p,c;
cin>>p>>c;
cp[p].push_back(c);
vl.push_back(c);
}
sort(vl.begin(),vl.end());
pst.init();
dfs(1,0);
for(int i=0;i<q;i++){
//cerr<<"question "<<i<<endl;
long long s,t,x,y;
cin>>s>>t>>x>>y;
int l=lca(s,t);
//cerr<<"lca:"<<l<<endl;
//cerr<<pst.root[s]<<" "<<pst.root[t]<<" "<<pst.root[l]<<endl;
int sil=pst.fkval(1,m,pst.root[s],pst.root[t],pst.root[l],y,0);
int all=pst.getcnt(pst.root[s])+pst.getcnt(pst.root[t])-pst.getcnt(pst.root[l])*2;
int left=all-sil;
int gl=x-left;
if(gl>=0){
cout<<gl<<"\n";
}else{
cout<<"-1\n";
}
//cerr<<endl;
}
}
Compilation message
currencies.cpp: In function 'void dfs(int, int)':
currencies.cpp:80:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
80 | for(int i=0;i<cp[np].size();i++){
| ~^~~~~~~~~~~~~~
currencies.cpp:90:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
90 | for(int i=0;i<v[x].size();i++){
| ~^~~~~~~~~~~~
currencies.cpp:76:18: warning: variable 'pp' set but not used [-Wunused-but-set-variable]
76 | pair<int,int>pp={x,p};
| ^~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
6492 KB |
Output is correct |
2 |
Correct |
1 ms |
6560 KB |
Output is correct |
3 |
Correct |
2 ms |
6492 KB |
Output is correct |
4 |
Correct |
2 ms |
6532 KB |
Output is correct |
5 |
Correct |
5 ms |
8028 KB |
Output is correct |
6 |
Correct |
6 ms |
8284 KB |
Output is correct |
7 |
Correct |
4 ms |
7772 KB |
Output is correct |
8 |
Correct |
6 ms |
8284 KB |
Output is correct |
9 |
Correct |
6 ms |
8284 KB |
Output is correct |
10 |
Correct |
6 ms |
8288 KB |
Output is correct |
11 |
Correct |
6 ms |
8280 KB |
Output is correct |
12 |
Correct |
6 ms |
8280 KB |
Output is correct |
13 |
Correct |
6 ms |
8680 KB |
Output is correct |
14 |
Correct |
6 ms |
8540 KB |
Output is correct |
15 |
Correct |
6 ms |
8284 KB |
Output is correct |
16 |
Correct |
6 ms |
8384 KB |
Output is correct |
17 |
Correct |
6 ms |
8284 KB |
Output is correct |
18 |
Correct |
6 ms |
8284 KB |
Output is correct |
19 |
Correct |
6 ms |
8284 KB |
Output is correct |
20 |
Correct |
5 ms |
8284 KB |
Output is correct |
21 |
Correct |
5 ms |
8284 KB |
Output is correct |
22 |
Correct |
5 ms |
8284 KB |
Output is correct |
23 |
Correct |
7 ms |
8284 KB |
Output is correct |
24 |
Correct |
6 ms |
8284 KB |
Output is correct |
25 |
Correct |
6 ms |
8284 KB |
Output is correct |
26 |
Correct |
6 ms |
8408 KB |
Output is correct |
27 |
Correct |
6 ms |
8296 KB |
Output is correct |
28 |
Correct |
6 ms |
8168 KB |
Output is correct |
29 |
Correct |
5 ms |
8280 KB |
Output is correct |
30 |
Correct |
5 ms |
8280 KB |
Output is correct |
31 |
Correct |
6 ms |
8284 KB |
Output is correct |
32 |
Correct |
6 ms |
8420 KB |
Output is correct |
33 |
Correct |
5 ms |
8540 KB |
Output is correct |
34 |
Correct |
6 ms |
8540 KB |
Output is correct |
35 |
Correct |
6 ms |
8600 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
6492 KB |
Output is correct |
2 |
Correct |
5 ms |
8284 KB |
Output is correct |
3 |
Correct |
6 ms |
8324 KB |
Output is correct |
4 |
Correct |
6 ms |
8284 KB |
Output is correct |
5 |
Correct |
379 ms |
117072 KB |
Output is correct |
6 |
Correct |
295 ms |
103104 KB |
Output is correct |
7 |
Correct |
313 ms |
89796 KB |
Output is correct |
8 |
Correct |
278 ms |
84680 KB |
Output is correct |
9 |
Correct |
300 ms |
92528 KB |
Output is correct |
10 |
Correct |
400 ms |
126928 KB |
Output is correct |
11 |
Correct |
430 ms |
126912 KB |
Output is correct |
12 |
Correct |
418 ms |
126828 KB |
Output is correct |
13 |
Correct |
404 ms |
126916 KB |
Output is correct |
14 |
Correct |
415 ms |
127424 KB |
Output is correct |
15 |
Correct |
452 ms |
141292 KB |
Output is correct |
16 |
Correct |
502 ms |
142416 KB |
Output is correct |
17 |
Correct |
461 ms |
140736 KB |
Output is correct |
18 |
Correct |
447 ms |
127144 KB |
Output is correct |
19 |
Correct |
442 ms |
127336 KB |
Output is correct |
20 |
Correct |
435 ms |
127144 KB |
Output is correct |
21 |
Correct |
355 ms |
127296 KB |
Output is correct |
22 |
Correct |
347 ms |
127180 KB |
Output is correct |
23 |
Correct |
370 ms |
127420 KB |
Output is correct |
24 |
Correct |
348 ms |
127172 KB |
Output is correct |
25 |
Correct |
379 ms |
126572 KB |
Output is correct |
26 |
Correct |
367 ms |
126776 KB |
Output is correct |
27 |
Correct |
372 ms |
127120 KB |
Output is correct |
28 |
Correct |
334 ms |
126900 KB |
Output is correct |
29 |
Correct |
338 ms |
126936 KB |
Output is correct |
30 |
Correct |
353 ms |
126780 KB |
Output is correct |
31 |
Correct |
397 ms |
127124 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
6488 KB |
Output is correct |
2 |
Correct |
5 ms |
8540 KB |
Output is correct |
3 |
Correct |
5 ms |
8540 KB |
Output is correct |
4 |
Correct |
6 ms |
8540 KB |
Output is correct |
5 |
Correct |
358 ms |
103888 KB |
Output is correct |
6 |
Correct |
330 ms |
89628 KB |
Output is correct |
7 |
Correct |
418 ms |
118716 KB |
Output is correct |
8 |
Correct |
585 ms |
146888 KB |
Output is correct |
9 |
Correct |
583 ms |
147204 KB |
Output is correct |
10 |
Correct |
601 ms |
147092 KB |
Output is correct |
11 |
Correct |
498 ms |
146376 KB |
Output is correct |
12 |
Correct |
491 ms |
146756 KB |
Output is correct |
13 |
Correct |
495 ms |
147068 KB |
Output is correct |
14 |
Correct |
345 ms |
146832 KB |
Output is correct |
15 |
Correct |
358 ms |
146992 KB |
Output is correct |
16 |
Correct |
391 ms |
147048 KB |
Output is correct |
17 |
Correct |
389 ms |
146904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
6492 KB |
Output is correct |
2 |
Correct |
1 ms |
6560 KB |
Output is correct |
3 |
Correct |
2 ms |
6492 KB |
Output is correct |
4 |
Correct |
2 ms |
6532 KB |
Output is correct |
5 |
Correct |
5 ms |
8028 KB |
Output is correct |
6 |
Correct |
6 ms |
8284 KB |
Output is correct |
7 |
Correct |
4 ms |
7772 KB |
Output is correct |
8 |
Correct |
6 ms |
8284 KB |
Output is correct |
9 |
Correct |
6 ms |
8284 KB |
Output is correct |
10 |
Correct |
6 ms |
8288 KB |
Output is correct |
11 |
Correct |
6 ms |
8280 KB |
Output is correct |
12 |
Correct |
6 ms |
8280 KB |
Output is correct |
13 |
Correct |
6 ms |
8680 KB |
Output is correct |
14 |
Correct |
6 ms |
8540 KB |
Output is correct |
15 |
Correct |
6 ms |
8284 KB |
Output is correct |
16 |
Correct |
6 ms |
8384 KB |
Output is correct |
17 |
Correct |
6 ms |
8284 KB |
Output is correct |
18 |
Correct |
6 ms |
8284 KB |
Output is correct |
19 |
Correct |
6 ms |
8284 KB |
Output is correct |
20 |
Correct |
5 ms |
8284 KB |
Output is correct |
21 |
Correct |
5 ms |
8284 KB |
Output is correct |
22 |
Correct |
5 ms |
8284 KB |
Output is correct |
23 |
Correct |
7 ms |
8284 KB |
Output is correct |
24 |
Correct |
6 ms |
8284 KB |
Output is correct |
25 |
Correct |
6 ms |
8284 KB |
Output is correct |
26 |
Correct |
6 ms |
8408 KB |
Output is correct |
27 |
Correct |
6 ms |
8296 KB |
Output is correct |
28 |
Correct |
6 ms |
8168 KB |
Output is correct |
29 |
Correct |
5 ms |
8280 KB |
Output is correct |
30 |
Correct |
5 ms |
8280 KB |
Output is correct |
31 |
Correct |
6 ms |
8284 KB |
Output is correct |
32 |
Correct |
6 ms |
8420 KB |
Output is correct |
33 |
Correct |
5 ms |
8540 KB |
Output is correct |
34 |
Correct |
6 ms |
8540 KB |
Output is correct |
35 |
Correct |
6 ms |
8600 KB |
Output is correct |
36 |
Correct |
1 ms |
6492 KB |
Output is correct |
37 |
Correct |
5 ms |
8284 KB |
Output is correct |
38 |
Correct |
6 ms |
8324 KB |
Output is correct |
39 |
Correct |
6 ms |
8284 KB |
Output is correct |
40 |
Correct |
379 ms |
117072 KB |
Output is correct |
41 |
Correct |
295 ms |
103104 KB |
Output is correct |
42 |
Correct |
313 ms |
89796 KB |
Output is correct |
43 |
Correct |
278 ms |
84680 KB |
Output is correct |
44 |
Correct |
300 ms |
92528 KB |
Output is correct |
45 |
Correct |
400 ms |
126928 KB |
Output is correct |
46 |
Correct |
430 ms |
126912 KB |
Output is correct |
47 |
Correct |
418 ms |
126828 KB |
Output is correct |
48 |
Correct |
404 ms |
126916 KB |
Output is correct |
49 |
Correct |
415 ms |
127424 KB |
Output is correct |
50 |
Correct |
452 ms |
141292 KB |
Output is correct |
51 |
Correct |
502 ms |
142416 KB |
Output is correct |
52 |
Correct |
461 ms |
140736 KB |
Output is correct |
53 |
Correct |
447 ms |
127144 KB |
Output is correct |
54 |
Correct |
442 ms |
127336 KB |
Output is correct |
55 |
Correct |
435 ms |
127144 KB |
Output is correct |
56 |
Correct |
355 ms |
127296 KB |
Output is correct |
57 |
Correct |
347 ms |
127180 KB |
Output is correct |
58 |
Correct |
370 ms |
127420 KB |
Output is correct |
59 |
Correct |
348 ms |
127172 KB |
Output is correct |
60 |
Correct |
379 ms |
126572 KB |
Output is correct |
61 |
Correct |
367 ms |
126776 KB |
Output is correct |
62 |
Correct |
372 ms |
127120 KB |
Output is correct |
63 |
Correct |
334 ms |
126900 KB |
Output is correct |
64 |
Correct |
338 ms |
126936 KB |
Output is correct |
65 |
Correct |
353 ms |
126780 KB |
Output is correct |
66 |
Correct |
397 ms |
127124 KB |
Output is correct |
67 |
Correct |
1 ms |
6488 KB |
Output is correct |
68 |
Correct |
5 ms |
8540 KB |
Output is correct |
69 |
Correct |
5 ms |
8540 KB |
Output is correct |
70 |
Correct |
6 ms |
8540 KB |
Output is correct |
71 |
Correct |
358 ms |
103888 KB |
Output is correct |
72 |
Correct |
330 ms |
89628 KB |
Output is correct |
73 |
Correct |
418 ms |
118716 KB |
Output is correct |
74 |
Correct |
585 ms |
146888 KB |
Output is correct |
75 |
Correct |
583 ms |
147204 KB |
Output is correct |
76 |
Correct |
601 ms |
147092 KB |
Output is correct |
77 |
Correct |
498 ms |
146376 KB |
Output is correct |
78 |
Correct |
491 ms |
146756 KB |
Output is correct |
79 |
Correct |
495 ms |
147068 KB |
Output is correct |
80 |
Correct |
345 ms |
146832 KB |
Output is correct |
81 |
Correct |
358 ms |
146992 KB |
Output is correct |
82 |
Correct |
391 ms |
147048 KB |
Output is correct |
83 |
Correct |
389 ms |
146904 KB |
Output is correct |
84 |
Correct |
404 ms |
119032 KB |
Output is correct |
85 |
Correct |
328 ms |
103388 KB |
Output is correct |
86 |
Correct |
261 ms |
76908 KB |
Output is correct |
87 |
Correct |
526 ms |
130720 KB |
Output is correct |
88 |
Correct |
495 ms |
130524 KB |
Output is correct |
89 |
Correct |
497 ms |
130648 KB |
Output is correct |
90 |
Correct |
505 ms |
130580 KB |
Output is correct |
91 |
Correct |
502 ms |
130500 KB |
Output is correct |
92 |
Correct |
749 ms |
141068 KB |
Output is correct |
93 |
Correct |
758 ms |
144472 KB |
Output is correct |
94 |
Correct |
635 ms |
131392 KB |
Output is correct |
95 |
Correct |
653 ms |
131488 KB |
Output is correct |
96 |
Correct |
638 ms |
131524 KB |
Output is correct |
97 |
Correct |
641 ms |
131268 KB |
Output is correct |
98 |
Correct |
440 ms |
130308 KB |
Output is correct |
99 |
Correct |
432 ms |
130820 KB |
Output is correct |
100 |
Correct |
431 ms |
130352 KB |
Output is correct |
101 |
Correct |
442 ms |
130584 KB |
Output is correct |
102 |
Correct |
489 ms |
130396 KB |
Output is correct |
103 |
Correct |
501 ms |
130376 KB |
Output is correct |
104 |
Correct |
507 ms |
130584 KB |
Output is correct |
105 |
Correct |
404 ms |
130552 KB |
Output is correct |
106 |
Correct |
427 ms |
130704 KB |
Output is correct |
107 |
Correct |
428 ms |
131016 KB |
Output is correct |
108 |
Correct |
469 ms |
130444 KB |
Output is correct |