#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const bool dbg=false;
const int N=1e5+5;
struct node{
ll val;
int freq;
node *l,*r;
node():val(0),freq(0),l(nullptr),r(nullptr){}
node(int val,int freq):val(val),freq(freq),l(nullptr),r(nullptr){}
node(int val,int freq,node *l,node *r):val(val),freq(freq),l(l),r(r){}
};
typedef node* nodeptr;
void build(int l,int r,nodeptr &t){
t=new node();
if(l==r)return;
int m=(l+r)/2;
build(l,m,t->l);
build(m+1,r,t->r);
}
void update(int l,int r,nodeptr &t,nodeptr k,int x,ll val){
t=new node(*k);
t->val+=val;
t->freq++;
if(l==r)return;
int m=(l+r)/2;
if(x<=m)update(l,m,t->l,k->l,x,val);
else update(m+1,r,t->r,k->r,x,val);
}
int query(int l,int r,vector<pair<nodeptr,nodeptr>> t,ll val){
if(l==r){
int res=0;
for(auto [tl,tr]:t)if(tr->val-tl->val<=val)res+=tr->freq-tl->freq;
return res;
}
int m=(l+r)/2;
ll sum=0;
for(auto [tl,tr]:t)sum+=tr->l->val-tl->l->val;
int freq=0;
for(auto [tl,tr]:t)freq+=tr->l->freq-tl->l->freq;
if(sum<=val){
for(auto &[tl,tr]:t)tl=tl->r,tr=tr->r;
return freq+query(m+1,r,t,val-sum);
}
for(auto &[tl,tr]:t)tl=tl->l,tr=tr->l;
return query(l,m,t,val);
}
int n,m,q;
int cost[N];
pair<int,int> edge[N];
nodeptr rt[N];
int mp[N];
vector<pair<int,int>> v;
vector<int> vec[N];
vector<int> adj[N];
int sz[N],heavy[N],chain[N],head[N],pos[N],nodeat[N];
int chainid=1,posid;
int pa[N][20],lv[N];
int belong[N];
void dfs(int u,int p){
lv[u]=lv[p]+1;
pa[u][0]=p;
for(int i=1;i<20;i++)pa[u][i]=pa[pa[u][i-1]][i-1];
sz[u]=1;
for(auto v:adj[u]){
if(v==p)continue;
dfs(v,u);
sz[u]+=sz[v];
if(sz[v]>sz[heavy[u]])heavy[u]=v;
}
}
int lca(int a,int b){
if(lv[a]<lv[b])swap(a,b);
for(int i=19;i>=0;i--)if(lv[pa[a][i]]>=lv[b])a=pa[a][i];
if(a==b)return a;
for(int i=19;i>=0;i--)if(pa[a][i]!=pa[b][i])a=pa[a][i],b=pa[b][i];
return pa[a][0];
}
void hld(int u,int p){
pos[u]=++posid;
nodeat[posid]=u;
chain[u]=chainid;
if(heavy[u])hld(heavy[u],u);
for(auto v:adj[u]){
if(v==p||v==heavy[u])continue;
head[++chainid]=v;
hld(v,u);
}
}
vector<pair<int,int>> queryup(int st,int ed){
vector<pair<int,int>> res;
int u=st;
while(chain[u]!=chain[ed]){
res.emplace_back(pos[head[chain[u]]],pos[u]);
u=pa[head[chain[u]]][0];
}
if(ed!=u)res.emplace_back(pos[ed]+1,pos[u]);
return res;
}
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m >> q;
for(int i=1;i<n;i++){
auto &[u,v]=edge[i];
cin >> u >> v;
adj[u].emplace_back(v);
adj[v].emplace_back(u);
}
dfs(1,0);
head[1]=1;
hld(1,0);
for(int i=1;i<=n;i++){
auto [u,v]=edge[i];
if(lv[u]<lv[v])swap(u,v);
belong[i]=u;
}
for(int i=1;i<=m;i++){
int x,y;
cin >> x >> cost[i];
vec[belong[x]].emplace_back(i);
v.emplace_back(cost[i],i);
}
sort(v.begin(),v.end());
for(int i=0;i<m;i++)mp[v[i].second]=i+1;
build(1,m,rt[0]);
for(int i=1;i<=n;i++){
rt[i]=rt[i-1];
for(auto j:vec[nodeat[i]])update(1,m,rt[i],rt[i],mp[j],cost[j]);
}
if(dbg){
for(int i=1;i<=n;i++)cerr << "(" << nodeat[i] << "," << chain[nodeat[i]] << ") ";
cerr << '\n';
for(int i=1;i<=chainid;i++)cerr << "(" << i << "," << head[i] << ") ";
}
while(q--){
int u,v,x;
ll y;
cin >> u >> v >> x >> y;
int LCA=lca(u,v);
vector<pair<nodeptr,nodeptr>> res;
auto q1=queryup(u,LCA);
auto q2=queryup(v,LCA);
for(auto [l,r]:q1)res.emplace_back(rt[l-1],rt[r]);
for(auto [l,r]:q2)res.emplace_back(rt[l-1],rt[r]);
int all=0;
for(auto [tl,tr]:res)all+=tr->freq-tl->freq;
int cnt=query(1,m,res,y);
cout << max(-1,x-(all-cnt)) << '\n';
}
}
Compilation message
currencies.cpp: In function 'int query(int, int, std::vector<std::pair<node*, node*> >, ll)':
currencies.cpp:42:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
42 | for(auto [tl,tr]:t)if(tr->val-tl->val<=val)res+=tr->freq-tl->freq;
| ^
currencies.cpp:47:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
47 | for(auto [tl,tr]:t)sum+=tr->l->val-tl->l->val;
| ^
currencies.cpp:49:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
49 | for(auto [tl,tr]:t)freq+=tr->l->freq-tl->l->freq;
| ^
currencies.cpp:51:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
51 | for(auto &[tl,tr]:t)tl=tl->r,tr=tr->r;
| ^
currencies.cpp:54:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
54 | for(auto &[tl,tr]:t)tl=tl->l,tr=tr->l;
| ^
currencies.cpp: In function 'int main()':
currencies.cpp:119:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
119 | auto &[u,v]=edge[i];
| ^
currencies.cpp:128:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
128 | auto [u,v]=edge[i];
| ^
currencies.cpp:133:15: warning: unused variable 'y' [-Wunused-variable]
133 | int x,y;
| ^
currencies.cpp:158:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
158 | for(auto [l,r]:q1)res.emplace_back(rt[l-1],rt[r]);
| ^
currencies.cpp:159:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
159 | for(auto [l,r]:q2)res.emplace_back(rt[l-1],rt[r]);
| ^
currencies.cpp:161:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
161 | for(auto [tl,tr]:res)all+=tr->freq-tl->freq;
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
5076 KB |
Output is correct |
2 |
Correct |
3 ms |
5076 KB |
Output is correct |
3 |
Correct |
3 ms |
5076 KB |
Output is correct |
4 |
Correct |
3 ms |
5076 KB |
Output is correct |
5 |
Correct |
8 ms |
6676 KB |
Output is correct |
6 |
Correct |
10 ms |
6716 KB |
Output is correct |
7 |
Correct |
12 ms |
6228 KB |
Output is correct |
8 |
Correct |
11 ms |
6812 KB |
Output is correct |
9 |
Correct |
10 ms |
6868 KB |
Output is correct |
10 |
Correct |
10 ms |
6868 KB |
Output is correct |
11 |
Correct |
10 ms |
6776 KB |
Output is correct |
12 |
Correct |
10 ms |
6880 KB |
Output is correct |
13 |
Correct |
8 ms |
6996 KB |
Output is correct |
14 |
Correct |
8 ms |
6968 KB |
Output is correct |
15 |
Correct |
9 ms |
6868 KB |
Output is correct |
16 |
Correct |
10 ms |
6996 KB |
Output is correct |
17 |
Correct |
9 ms |
6868 KB |
Output is correct |
18 |
Correct |
12 ms |
6868 KB |
Output is correct |
19 |
Correct |
9 ms |
6868 KB |
Output is correct |
20 |
Correct |
8 ms |
6868 KB |
Output is correct |
21 |
Correct |
9 ms |
6868 KB |
Output is correct |
22 |
Correct |
8 ms |
6868 KB |
Output is correct |
23 |
Correct |
9 ms |
6868 KB |
Output is correct |
24 |
Correct |
9 ms |
6848 KB |
Output is correct |
25 |
Correct |
13 ms |
6868 KB |
Output is correct |
26 |
Correct |
9 ms |
6840 KB |
Output is correct |
27 |
Correct |
8 ms |
6860 KB |
Output is correct |
28 |
Correct |
9 ms |
6856 KB |
Output is correct |
29 |
Correct |
8 ms |
6868 KB |
Output is correct |
30 |
Correct |
9 ms |
6848 KB |
Output is correct |
31 |
Correct |
9 ms |
6836 KB |
Output is correct |
32 |
Correct |
9 ms |
6868 KB |
Output is correct |
33 |
Correct |
8 ms |
7020 KB |
Output is correct |
34 |
Correct |
8 ms |
6996 KB |
Output is correct |
35 |
Correct |
8 ms |
7024 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
5076 KB |
Output is correct |
2 |
Correct |
10 ms |
6832 KB |
Output is correct |
3 |
Correct |
10 ms |
6868 KB |
Output is correct |
4 |
Correct |
9 ms |
6868 KB |
Output is correct |
5 |
Correct |
655 ms |
110892 KB |
Output is correct |
6 |
Correct |
844 ms |
98520 KB |
Output is correct |
7 |
Correct |
771 ms |
84100 KB |
Output is correct |
8 |
Correct |
626 ms |
80840 KB |
Output is correct |
9 |
Correct |
612 ms |
86000 KB |
Output is correct |
10 |
Correct |
1038 ms |
122288 KB |
Output is correct |
11 |
Correct |
977 ms |
122044 KB |
Output is correct |
12 |
Correct |
958 ms |
122044 KB |
Output is correct |
13 |
Correct |
1012 ms |
122064 KB |
Output is correct |
14 |
Correct |
935 ms |
122072 KB |
Output is correct |
15 |
Correct |
802 ms |
129828 KB |
Output is correct |
16 |
Correct |
768 ms |
130172 KB |
Output is correct |
17 |
Correct |
799 ms |
129396 KB |
Output is correct |
18 |
Correct |
1006 ms |
122204 KB |
Output is correct |
19 |
Correct |
979 ms |
122276 KB |
Output is correct |
20 |
Correct |
934 ms |
122388 KB |
Output is correct |
21 |
Correct |
675 ms |
121536 KB |
Output is correct |
22 |
Correct |
606 ms |
121740 KB |
Output is correct |
23 |
Correct |
583 ms |
122040 KB |
Output is correct |
24 |
Correct |
573 ms |
122000 KB |
Output is correct |
25 |
Correct |
782 ms |
121924 KB |
Output is correct |
26 |
Correct |
770 ms |
122268 KB |
Output is correct |
27 |
Correct |
793 ms |
121988 KB |
Output is correct |
28 |
Correct |
462 ms |
121888 KB |
Output is correct |
29 |
Correct |
464 ms |
121900 KB |
Output is correct |
30 |
Correct |
605 ms |
122216 KB |
Output is correct |
31 |
Correct |
556 ms |
122132 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
5076 KB |
Output is correct |
2 |
Correct |
8 ms |
6996 KB |
Output is correct |
3 |
Correct |
9 ms |
7012 KB |
Output is correct |
4 |
Correct |
9 ms |
6996 KB |
Output is correct |
5 |
Correct |
409 ms |
92032 KB |
Output is correct |
6 |
Correct |
415 ms |
78316 KB |
Output is correct |
7 |
Correct |
528 ms |
111208 KB |
Output is correct |
8 |
Correct |
685 ms |
130332 KB |
Output is correct |
9 |
Correct |
693 ms |
130416 KB |
Output is correct |
10 |
Correct |
657 ms |
130404 KB |
Output is correct |
11 |
Correct |
588 ms |
129900 KB |
Output is correct |
12 |
Correct |
579 ms |
129816 KB |
Output is correct |
13 |
Correct |
590 ms |
129728 KB |
Output is correct |
14 |
Correct |
392 ms |
130272 KB |
Output is correct |
15 |
Correct |
398 ms |
130192 KB |
Output is correct |
16 |
Correct |
425 ms |
130348 KB |
Output is correct |
17 |
Correct |
435 ms |
130536 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
5076 KB |
Output is correct |
2 |
Correct |
3 ms |
5076 KB |
Output is correct |
3 |
Correct |
3 ms |
5076 KB |
Output is correct |
4 |
Correct |
3 ms |
5076 KB |
Output is correct |
5 |
Correct |
8 ms |
6676 KB |
Output is correct |
6 |
Correct |
10 ms |
6716 KB |
Output is correct |
7 |
Correct |
12 ms |
6228 KB |
Output is correct |
8 |
Correct |
11 ms |
6812 KB |
Output is correct |
9 |
Correct |
10 ms |
6868 KB |
Output is correct |
10 |
Correct |
10 ms |
6868 KB |
Output is correct |
11 |
Correct |
10 ms |
6776 KB |
Output is correct |
12 |
Correct |
10 ms |
6880 KB |
Output is correct |
13 |
Correct |
8 ms |
6996 KB |
Output is correct |
14 |
Correct |
8 ms |
6968 KB |
Output is correct |
15 |
Correct |
9 ms |
6868 KB |
Output is correct |
16 |
Correct |
10 ms |
6996 KB |
Output is correct |
17 |
Correct |
9 ms |
6868 KB |
Output is correct |
18 |
Correct |
12 ms |
6868 KB |
Output is correct |
19 |
Correct |
9 ms |
6868 KB |
Output is correct |
20 |
Correct |
8 ms |
6868 KB |
Output is correct |
21 |
Correct |
9 ms |
6868 KB |
Output is correct |
22 |
Correct |
8 ms |
6868 KB |
Output is correct |
23 |
Correct |
9 ms |
6868 KB |
Output is correct |
24 |
Correct |
9 ms |
6848 KB |
Output is correct |
25 |
Correct |
13 ms |
6868 KB |
Output is correct |
26 |
Correct |
9 ms |
6840 KB |
Output is correct |
27 |
Correct |
8 ms |
6860 KB |
Output is correct |
28 |
Correct |
9 ms |
6856 KB |
Output is correct |
29 |
Correct |
8 ms |
6868 KB |
Output is correct |
30 |
Correct |
9 ms |
6848 KB |
Output is correct |
31 |
Correct |
9 ms |
6836 KB |
Output is correct |
32 |
Correct |
9 ms |
6868 KB |
Output is correct |
33 |
Correct |
8 ms |
7020 KB |
Output is correct |
34 |
Correct |
8 ms |
6996 KB |
Output is correct |
35 |
Correct |
8 ms |
7024 KB |
Output is correct |
36 |
Correct |
3 ms |
5076 KB |
Output is correct |
37 |
Correct |
10 ms |
6832 KB |
Output is correct |
38 |
Correct |
10 ms |
6868 KB |
Output is correct |
39 |
Correct |
9 ms |
6868 KB |
Output is correct |
40 |
Correct |
655 ms |
110892 KB |
Output is correct |
41 |
Correct |
844 ms |
98520 KB |
Output is correct |
42 |
Correct |
771 ms |
84100 KB |
Output is correct |
43 |
Correct |
626 ms |
80840 KB |
Output is correct |
44 |
Correct |
612 ms |
86000 KB |
Output is correct |
45 |
Correct |
1038 ms |
122288 KB |
Output is correct |
46 |
Correct |
977 ms |
122044 KB |
Output is correct |
47 |
Correct |
958 ms |
122044 KB |
Output is correct |
48 |
Correct |
1012 ms |
122064 KB |
Output is correct |
49 |
Correct |
935 ms |
122072 KB |
Output is correct |
50 |
Correct |
802 ms |
129828 KB |
Output is correct |
51 |
Correct |
768 ms |
130172 KB |
Output is correct |
52 |
Correct |
799 ms |
129396 KB |
Output is correct |
53 |
Correct |
1006 ms |
122204 KB |
Output is correct |
54 |
Correct |
979 ms |
122276 KB |
Output is correct |
55 |
Correct |
934 ms |
122388 KB |
Output is correct |
56 |
Correct |
675 ms |
121536 KB |
Output is correct |
57 |
Correct |
606 ms |
121740 KB |
Output is correct |
58 |
Correct |
583 ms |
122040 KB |
Output is correct |
59 |
Correct |
573 ms |
122000 KB |
Output is correct |
60 |
Correct |
782 ms |
121924 KB |
Output is correct |
61 |
Correct |
770 ms |
122268 KB |
Output is correct |
62 |
Correct |
793 ms |
121988 KB |
Output is correct |
63 |
Correct |
462 ms |
121888 KB |
Output is correct |
64 |
Correct |
464 ms |
121900 KB |
Output is correct |
65 |
Correct |
605 ms |
122216 KB |
Output is correct |
66 |
Correct |
556 ms |
122132 KB |
Output is correct |
67 |
Correct |
3 ms |
5076 KB |
Output is correct |
68 |
Correct |
8 ms |
6996 KB |
Output is correct |
69 |
Correct |
9 ms |
7012 KB |
Output is correct |
70 |
Correct |
9 ms |
6996 KB |
Output is correct |
71 |
Correct |
409 ms |
92032 KB |
Output is correct |
72 |
Correct |
415 ms |
78316 KB |
Output is correct |
73 |
Correct |
528 ms |
111208 KB |
Output is correct |
74 |
Correct |
685 ms |
130332 KB |
Output is correct |
75 |
Correct |
693 ms |
130416 KB |
Output is correct |
76 |
Correct |
657 ms |
130404 KB |
Output is correct |
77 |
Correct |
588 ms |
129900 KB |
Output is correct |
78 |
Correct |
579 ms |
129816 KB |
Output is correct |
79 |
Correct |
590 ms |
129728 KB |
Output is correct |
80 |
Correct |
392 ms |
130272 KB |
Output is correct |
81 |
Correct |
398 ms |
130192 KB |
Output is correct |
82 |
Correct |
425 ms |
130348 KB |
Output is correct |
83 |
Correct |
435 ms |
130536 KB |
Output is correct |
84 |
Correct |
613 ms |
111672 KB |
Output is correct |
85 |
Correct |
604 ms |
98092 KB |
Output is correct |
86 |
Correct |
547 ms |
71520 KB |
Output is correct |
87 |
Correct |
925 ms |
121988 KB |
Output is correct |
88 |
Correct |
953 ms |
122208 KB |
Output is correct |
89 |
Correct |
962 ms |
121984 KB |
Output is correct |
90 |
Correct |
957 ms |
121932 KB |
Output is correct |
91 |
Correct |
937 ms |
122088 KB |
Output is correct |
92 |
Correct |
790 ms |
127388 KB |
Output is correct |
93 |
Correct |
752 ms |
129164 KB |
Output is correct |
94 |
Correct |
909 ms |
122396 KB |
Output is correct |
95 |
Correct |
954 ms |
122560 KB |
Output is correct |
96 |
Correct |
936 ms |
122384 KB |
Output is correct |
97 |
Correct |
934 ms |
122388 KB |
Output is correct |
98 |
Correct |
631 ms |
121540 KB |
Output is correct |
99 |
Correct |
603 ms |
121608 KB |
Output is correct |
100 |
Correct |
605 ms |
122048 KB |
Output is correct |
101 |
Correct |
604 ms |
121988 KB |
Output is correct |
102 |
Correct |
764 ms |
121912 KB |
Output is correct |
103 |
Correct |
794 ms |
122036 KB |
Output is correct |
104 |
Correct |
778 ms |
121808 KB |
Output is correct |
105 |
Correct |
481 ms |
122080 KB |
Output is correct |
106 |
Correct |
513 ms |
122072 KB |
Output is correct |
107 |
Correct |
587 ms |
121984 KB |
Output is correct |
108 |
Correct |
569 ms |
121952 KB |
Output is correct |