#include <bits/stdc++.h>
using namespace std;
struct node{
long long val,cnt;
node *l, *r;
node(long long V, long long C){
val=V;
cnt=C;
l=r=NULL;
}
node(node* le, node* ri){
l=le;
r=ri;
val=l->val+r->val;
cnt=l->cnt+r->cnt;
}
};
void prop(node* nd){
if(nd->l==NULL){
nd->r=new node(0LL,0LL);
nd->l=new node(0LL,0LL);
}
}
node* update(node* lol, int s, int e, int x){
if(s==e) return new node(lol->val+s,lol->cnt+1);
int mid=(s+e)/2;
prop(lol);
if(x<=mid) return new node(update(lol->l,s,mid,x),lol->r);
else return new node(lol->l,update(lol->r,mid+1,e,x));
}
long long bsta(node* base, node* base2, node* one, node* two, int s, int e, long long V){
long long tcnt=one->cnt+two->cnt-base->cnt-base2->cnt;
if(s==e){
return min(tcnt,V/(long long)s);
}
int mid=(s+e)/2;
prop(base); prop(base2); prop(one); prop(two);
long long ltcnt=one->l->cnt+two->l->cnt-base->l->cnt-base2->l->cnt;
long long ltval=one->l->val+two->l->val-base->l->val-base2->l->val;
if(ltval>V) return bsta(base->l,base2->l,one->l,two->l,s,mid,V);
else return ltcnt+bsta(base->r,base2->r,one->r,two->r,mid+1,e,V-ltval);
}
node* nodes[200005];
vector<int> adj[200005];
long long cost[200005];
int par[200005];
void dfs(int x, int p){
nodes[x]=update(nodes[p],0,1000000005,cost[x]);
for(int i:adj[x]){
if(i==p) continue;
par[i]=x;
dfs(i,x);
}
}
const int MAXN = 200050;
const int LOGN = 20;
int p[LOGN+1][MAXN], h[MAXN]; //h: number of edges from root
bitset<MAXN> visited;
void dfss(int x) {
if (visited[x]) return;
visited[x] = 1LL;
for (int k = 0LL; k < LOGN; ++k) {
if (p[k][x] == -1LL) break;
p[k+1LL][x] = p[k][p[k][x]];
}
for (int it:adj[x]) {
if (visited[it]) continue;
p[0][it] = x;
h[it] = h[x] + 1LL;
dfss(it);
}
}
/* Query */
int lca(int a, int b) { //h[a] < h[b]
if (h[a] > h[b]) swap(a, b);
/* advance b by h[b] - h[a] parents */
for (int k = 0, d = h[b] - h[a]; k < LOGN; ++k) {
if (d & (1<<k)) b = p[k][b];
}
if (a == b) return a;
assert(h[a] == h[b]); //same height
/* to be continued */
for (int k = LOGN-1; k >= 0; --k) {
if (p[k][a] != p[k][b])
a = p[k][a], b = p[k][b];
}
assert(p[0][a] == p[0][b]); //same immediate parent
return p[0][a];
}
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
memset(p,-1,sizeof(p));
int n,m,q;
cin >> n >> m >> q;
vector<pair<int,int> > edges;
for(int i=0; i<n-1; i++){
int a,b;
cin >> a >> b;
edges.push_back({a,b});
}
int cnt=n+1LL;
for(int i=0; i<m; i++){
int a;
long long b;
cin >> a >> b;
cost[cnt]=b;
edges.push_back({cnt,edges[a-1LL].second});
edges[a-1LL].second=cnt;
cnt++;
}
for(auto i:edges){
adj[i.first].push_back(i.second);
adj[i.second].push_back(i.first);
}
nodes[0]=new node(0LL,0LL);
dfs(1LL,0LL);
dfss(1LL);
for(int i=0; i<q; i++){
int a,b;
long long c,d;
cin >> a >> b >> c >> d;
int o=lca(a,b);
int cry=par[o];
long long yes=bsta(nodes[o],nodes[cry],nodes[a],nodes[b],0,1000000005,d);
long long ret=c-(h[a]+h[b]-2*h[o]+1-yes);
if(ret<0) cout << -1 << '\n';
else cout << ret << '\n';
}
}
/*5 4 3
1 2
1 3
2 4
2 5
2 9
2 4
3 5
4 7
3 4 2 11
5 3 4 5
2 3 1 1*/
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
21460 KB |
Output is correct |
2 |
Correct |
11 ms |
21460 KB |
Output is correct |
3 |
Correct |
10 ms |
21436 KB |
Output is correct |
4 |
Correct |
11 ms |
21484 KB |
Output is correct |
5 |
Correct |
24 ms |
30424 KB |
Output is correct |
6 |
Correct |
22 ms |
30500 KB |
Output is correct |
7 |
Correct |
19 ms |
28132 KB |
Output is correct |
8 |
Correct |
23 ms |
31224 KB |
Output is correct |
9 |
Correct |
23 ms |
31232 KB |
Output is correct |
10 |
Correct |
25 ms |
31144 KB |
Output is correct |
11 |
Correct |
22 ms |
31188 KB |
Output is correct |
12 |
Correct |
24 ms |
31188 KB |
Output is correct |
13 |
Correct |
23 ms |
31308 KB |
Output is correct |
14 |
Correct |
24 ms |
31372 KB |
Output is correct |
15 |
Correct |
25 ms |
31288 KB |
Output is correct |
16 |
Correct |
23 ms |
31252 KB |
Output is correct |
17 |
Correct |
29 ms |
31180 KB |
Output is correct |
18 |
Correct |
23 ms |
31252 KB |
Output is correct |
19 |
Correct |
25 ms |
31120 KB |
Output is correct |
20 |
Correct |
25 ms |
31184 KB |
Output is correct |
21 |
Correct |
22 ms |
31196 KB |
Output is correct |
22 |
Correct |
23 ms |
31136 KB |
Output is correct |
23 |
Correct |
22 ms |
31184 KB |
Output is correct |
24 |
Correct |
22 ms |
31240 KB |
Output is correct |
25 |
Correct |
22 ms |
31188 KB |
Output is correct |
26 |
Correct |
21 ms |
31188 KB |
Output is correct |
27 |
Correct |
22 ms |
31196 KB |
Output is correct |
28 |
Correct |
22 ms |
31188 KB |
Output is correct |
29 |
Correct |
21 ms |
31188 KB |
Output is correct |
30 |
Correct |
18 ms |
27560 KB |
Output is correct |
31 |
Correct |
18 ms |
27536 KB |
Output is correct |
32 |
Correct |
18 ms |
27604 KB |
Output is correct |
33 |
Correct |
27 ms |
31564 KB |
Output is correct |
34 |
Correct |
24 ms |
31360 KB |
Output is correct |
35 |
Correct |
24 ms |
31464 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
21460 KB |
Output is correct |
2 |
Correct |
18 ms |
27604 KB |
Output is correct |
3 |
Correct |
16 ms |
27556 KB |
Output is correct |
4 |
Correct |
24 ms |
27540 KB |
Output is correct |
5 |
Correct |
497 ms |
312360 KB |
Output is correct |
6 |
Correct |
487 ms |
250212 KB |
Output is correct |
7 |
Correct |
457 ms |
248712 KB |
Output is correct |
8 |
Correct |
416 ms |
250756 KB |
Output is correct |
9 |
Correct |
416 ms |
258088 KB |
Output is correct |
10 |
Correct |
606 ms |
328436 KB |
Output is correct |
11 |
Correct |
646 ms |
328440 KB |
Output is correct |
12 |
Correct |
608 ms |
328484 KB |
Output is correct |
13 |
Correct |
721 ms |
328480 KB |
Output is correct |
14 |
Correct |
620 ms |
323728 KB |
Output is correct |
15 |
Correct |
743 ms |
342200 KB |
Output is correct |
16 |
Correct |
701 ms |
342968 KB |
Output is correct |
17 |
Correct |
757 ms |
341668 KB |
Output is correct |
18 |
Correct |
697 ms |
330508 KB |
Output is correct |
19 |
Correct |
710 ms |
330552 KB |
Output is correct |
20 |
Correct |
656 ms |
330700 KB |
Output is correct |
21 |
Correct |
548 ms |
329488 KB |
Output is correct |
22 |
Correct |
554 ms |
329832 KB |
Output is correct |
23 |
Correct |
545 ms |
329728 KB |
Output is correct |
24 |
Correct |
525 ms |
329720 KB |
Output is correct |
25 |
Correct |
533 ms |
333552 KB |
Output is correct |
26 |
Correct |
540 ms |
333640 KB |
Output is correct |
27 |
Correct |
727 ms |
333552 KB |
Output is correct |
28 |
Correct |
482 ms |
325156 KB |
Output is correct |
29 |
Correct |
485 ms |
329720 KB |
Output is correct |
30 |
Correct |
484 ms |
329996 KB |
Output is correct |
31 |
Correct |
482 ms |
330004 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
21460 KB |
Output is correct |
2 |
Correct |
23 ms |
31392 KB |
Output is correct |
3 |
Correct |
24 ms |
31416 KB |
Output is correct |
4 |
Correct |
27 ms |
31456 KB |
Output is correct |
5 |
Correct |
643 ms |
363624 KB |
Output is correct |
6 |
Correct |
601 ms |
322260 KB |
Output is correct |
7 |
Correct |
786 ms |
375976 KB |
Output is correct |
8 |
Correct |
988 ms |
469064 KB |
Output is correct |
9 |
Correct |
1002 ms |
469048 KB |
Output is correct |
10 |
Correct |
978 ms |
468856 KB |
Output is correct |
11 |
Correct |
892 ms |
469036 KB |
Output is correct |
12 |
Correct |
969 ms |
468908 KB |
Output is correct |
13 |
Correct |
947 ms |
468864 KB |
Output is correct |
14 |
Correct |
842 ms |
468788 KB |
Output is correct |
15 |
Correct |
835 ms |
468708 KB |
Output is correct |
16 |
Correct |
825 ms |
469160 KB |
Output is correct |
17 |
Correct |
839 ms |
468832 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
21460 KB |
Output is correct |
2 |
Correct |
11 ms |
21460 KB |
Output is correct |
3 |
Correct |
10 ms |
21436 KB |
Output is correct |
4 |
Correct |
11 ms |
21484 KB |
Output is correct |
5 |
Correct |
24 ms |
30424 KB |
Output is correct |
6 |
Correct |
22 ms |
30500 KB |
Output is correct |
7 |
Correct |
19 ms |
28132 KB |
Output is correct |
8 |
Correct |
23 ms |
31224 KB |
Output is correct |
9 |
Correct |
23 ms |
31232 KB |
Output is correct |
10 |
Correct |
25 ms |
31144 KB |
Output is correct |
11 |
Correct |
22 ms |
31188 KB |
Output is correct |
12 |
Correct |
24 ms |
31188 KB |
Output is correct |
13 |
Correct |
23 ms |
31308 KB |
Output is correct |
14 |
Correct |
24 ms |
31372 KB |
Output is correct |
15 |
Correct |
25 ms |
31288 KB |
Output is correct |
16 |
Correct |
23 ms |
31252 KB |
Output is correct |
17 |
Correct |
29 ms |
31180 KB |
Output is correct |
18 |
Correct |
23 ms |
31252 KB |
Output is correct |
19 |
Correct |
25 ms |
31120 KB |
Output is correct |
20 |
Correct |
25 ms |
31184 KB |
Output is correct |
21 |
Correct |
22 ms |
31196 KB |
Output is correct |
22 |
Correct |
23 ms |
31136 KB |
Output is correct |
23 |
Correct |
22 ms |
31184 KB |
Output is correct |
24 |
Correct |
22 ms |
31240 KB |
Output is correct |
25 |
Correct |
22 ms |
31188 KB |
Output is correct |
26 |
Correct |
21 ms |
31188 KB |
Output is correct |
27 |
Correct |
22 ms |
31196 KB |
Output is correct |
28 |
Correct |
22 ms |
31188 KB |
Output is correct |
29 |
Correct |
21 ms |
31188 KB |
Output is correct |
30 |
Correct |
18 ms |
27560 KB |
Output is correct |
31 |
Correct |
18 ms |
27536 KB |
Output is correct |
32 |
Correct |
18 ms |
27604 KB |
Output is correct |
33 |
Correct |
27 ms |
31564 KB |
Output is correct |
34 |
Correct |
24 ms |
31360 KB |
Output is correct |
35 |
Correct |
24 ms |
31464 KB |
Output is correct |
36 |
Correct |
9 ms |
21460 KB |
Output is correct |
37 |
Correct |
18 ms |
27604 KB |
Output is correct |
38 |
Correct |
16 ms |
27556 KB |
Output is correct |
39 |
Correct |
24 ms |
27540 KB |
Output is correct |
40 |
Correct |
497 ms |
312360 KB |
Output is correct |
41 |
Correct |
487 ms |
250212 KB |
Output is correct |
42 |
Correct |
457 ms |
248712 KB |
Output is correct |
43 |
Correct |
416 ms |
250756 KB |
Output is correct |
44 |
Correct |
416 ms |
258088 KB |
Output is correct |
45 |
Correct |
606 ms |
328436 KB |
Output is correct |
46 |
Correct |
646 ms |
328440 KB |
Output is correct |
47 |
Correct |
608 ms |
328484 KB |
Output is correct |
48 |
Correct |
721 ms |
328480 KB |
Output is correct |
49 |
Correct |
620 ms |
323728 KB |
Output is correct |
50 |
Correct |
743 ms |
342200 KB |
Output is correct |
51 |
Correct |
701 ms |
342968 KB |
Output is correct |
52 |
Correct |
757 ms |
341668 KB |
Output is correct |
53 |
Correct |
697 ms |
330508 KB |
Output is correct |
54 |
Correct |
710 ms |
330552 KB |
Output is correct |
55 |
Correct |
656 ms |
330700 KB |
Output is correct |
56 |
Correct |
548 ms |
329488 KB |
Output is correct |
57 |
Correct |
554 ms |
329832 KB |
Output is correct |
58 |
Correct |
545 ms |
329728 KB |
Output is correct |
59 |
Correct |
525 ms |
329720 KB |
Output is correct |
60 |
Correct |
533 ms |
333552 KB |
Output is correct |
61 |
Correct |
540 ms |
333640 KB |
Output is correct |
62 |
Correct |
727 ms |
333552 KB |
Output is correct |
63 |
Correct |
482 ms |
325156 KB |
Output is correct |
64 |
Correct |
485 ms |
329720 KB |
Output is correct |
65 |
Correct |
484 ms |
329996 KB |
Output is correct |
66 |
Correct |
482 ms |
330004 KB |
Output is correct |
67 |
Correct |
10 ms |
21460 KB |
Output is correct |
68 |
Correct |
23 ms |
31392 KB |
Output is correct |
69 |
Correct |
24 ms |
31416 KB |
Output is correct |
70 |
Correct |
27 ms |
31456 KB |
Output is correct |
71 |
Correct |
643 ms |
363624 KB |
Output is correct |
72 |
Correct |
601 ms |
322260 KB |
Output is correct |
73 |
Correct |
786 ms |
375976 KB |
Output is correct |
74 |
Correct |
988 ms |
469064 KB |
Output is correct |
75 |
Correct |
1002 ms |
469048 KB |
Output is correct |
76 |
Correct |
978 ms |
468856 KB |
Output is correct |
77 |
Correct |
892 ms |
469036 KB |
Output is correct |
78 |
Correct |
969 ms |
468908 KB |
Output is correct |
79 |
Correct |
947 ms |
468864 KB |
Output is correct |
80 |
Correct |
842 ms |
468788 KB |
Output is correct |
81 |
Correct |
835 ms |
468708 KB |
Output is correct |
82 |
Correct |
825 ms |
469160 KB |
Output is correct |
83 |
Correct |
839 ms |
468832 KB |
Output is correct |
84 |
Correct |
694 ms |
411528 KB |
Output is correct |
85 |
Correct |
611 ms |
343756 KB |
Output is correct |
86 |
Correct |
529 ms |
271852 KB |
Output is correct |
87 |
Correct |
836 ms |
455628 KB |
Output is correct |
88 |
Correct |
870 ms |
455500 KB |
Output is correct |
89 |
Correct |
861 ms |
455720 KB |
Output is correct |
90 |
Correct |
928 ms |
455712 KB |
Output is correct |
91 |
Correct |
865 ms |
455548 KB |
Output is correct |
92 |
Correct |
1138 ms |
464188 KB |
Output is correct |
93 |
Correct |
1109 ms |
466888 KB |
Output is correct |
94 |
Correct |
1016 ms |
456444 KB |
Output is correct |
95 |
Correct |
1038 ms |
456452 KB |
Output is correct |
96 |
Correct |
1055 ms |
456212 KB |
Output is correct |
97 |
Correct |
1035 ms |
456364 KB |
Output is correct |
98 |
Correct |
889 ms |
455408 KB |
Output is correct |
99 |
Correct |
783 ms |
455652 KB |
Output is correct |
100 |
Correct |
820 ms |
455396 KB |
Output is correct |
101 |
Correct |
771 ms |
455616 KB |
Output is correct |
102 |
Correct |
865 ms |
459132 KB |
Output is correct |
103 |
Correct |
845 ms |
459044 KB |
Output is correct |
104 |
Correct |
826 ms |
459000 KB |
Output is correct |
105 |
Correct |
663 ms |
455744 KB |
Output is correct |
106 |
Correct |
671 ms |
455764 KB |
Output is correct |
107 |
Correct |
679 ms |
455544 KB |
Output is correct |
108 |
Correct |
693 ms |
455748 KB |
Output is correct |