#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define all(c) c.begin(), c.end()
#define endl "\n"
const double PI=3.141592653589;
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define dbg(x...) cerr << "LINE(" << __LINE__ << ") -> " <<"[" << #x << "] = ["; _print(x)
#else
#define dbg(x...)
#endif
struct segtree{
int size =1;
vector<int> arr;
void init(int n){
while(size < n)size*=2;
arr.resize(size*2, 0);
}
void set(int i, int v, int x, int lx, int rx){
if(rx - lx == 1){
arr[x] = v;
return;
}
int m = (lx+rx)/2;
if(i < m){
set(i, v, 2*x+1, lx, m);
}else{
set(i, v, 2*x+2, m, rx);
}
arr[x] = arr[2*x+1]+arr[2*x+2];
}
void set(int i, int v){
set(i, v, 0, 0, size);
}
int sol(int l, int r, int x, int lx, int rx){
if(lx>=r || rx<=l)return 0;
if(lx>=l && rx<=r)return arr[x];
int m = (lx+rx)/2;
int right = sol(l,r,2*x+2,m,rx);
int left = sol(l,r,2*x+1,lx,m);
return right+left;
}
int sol(int l, int r){
return sol(l, r, 0, 0, size);
}
};
int sz = 1, ptr = 0;
int mxn = 8e5+5,mxk = 22;
vector<pair<int,int>>seg(mxn*mxk),child(mxn*mxk);
void init(int n){
while(sz < n)sz*=2;
}
pair<int,int> merge(pair<int,int>a, pair<int,int>b){
return {a.first+b.first,a.second+b.second};
}
void upd(int curr, int prev, int lx, int rx, int i, pair<int,int>v){
if(rx-lx==1){
seg[curr] = v;
return;
}
int m = (lx+rx)/2;
if(i < m){
child[curr].first = ++ptr;
child[curr].second = child[prev].second;
upd(child[curr].first,child[prev].first,lx,m,i,v);
}else{
child[curr].second = ++ptr;
child[curr].first = child[prev].first;
upd(child[curr].second,child[prev].second,m,rx,i,v);
}
seg[curr] = merge(seg[child[curr].first], seg[child[curr].second]);
}
void upd(int curr, int prev, int i, pair<int,int>v){
upd(curr,prev,0,sz,i,v);
}
pair<int,int>sol(int curr, int lx, int rx, int l, int r){
if(curr==0)return {0,0};
if(lx >= l && rx <= r)return seg[curr];
if(rx <= l || lx >= r)return {0,0};
int m = (lx+rx)/2;
return merge(sol(child[curr].first,lx,m,l,r),sol(child[curr].second,m,rx,l,r));
}
pair<int,int>sol(int curr, int l, int r){
return sol(curr,0,sz,l,r);
}
int f,n,m,q;
vector<vector<int>>tax,up;
vector<set<int>>adj;
vector<int>in,out,dist,val,par;
int t = 1;
void comp(int u, int p){
for(int v : adj[u]){
if(v==p)continue;
par[v] = u;
comp(v,u);
}
}
void dfs(int u, int p){
in[u] = t;
t++;
for(int v : adj[u]){
if(v==p)continue;
dist[v] = dist[u]+1;
up[v][0] = u;
par[v] = u;
for(int j = 1;j<=20;++j)up[v][j] = up[up[v][j-1]][j-1];
dfs(v,u);
}
out[u] = t;
t++;
}
int lca(int u, int v){
if(dist[v] > dist[u])swap(v,u);
int k = dist[u]-dist[v];
for(int j = 20;j>=0;--j){
if(k&(1ll<<j))u = up[u][j];
}
if(v==u)return u;
for(int j = 20;j>=0;--j){
if(up[u][j] != up[v][j])u = up[u][j], v = up[v][j];
}
return up[v][0];
}
int go(int u, int k){
for(int j = 0;j<=20;++j){
if(k&(1ll<<j))u = up[u][j];
}
return u;
}
void solve()
{
cin >> f >> m >> q;
vector<pair<int,int>>edges = {{0,0}};
n = f+m+1;
tax.resize(n+1);
adj.resize(n+1);
up = vector<vector<int>>(n+1, vector<int>(21));
dist.resize(n+1);
in.resize(n+1);
out.resize(n+1);
val.resize(n+1);
par.resize(n+1);
for(int i = 1;i<f;++i){
int u,v;
cin >> u >> v;
edges.pb({u,v});
adj[u].insert(v);
adj[v].insert(u);
}
comp(1,-1);
for(int i = 1;i<=m;++i){
int p,c;
cin >> p >> c;
int u = edges[p].first, v = edges[p].second;
if(par[u]==v)swap(v,u);
// par[v] = u
tax[v].pb(c);
}
int p = f+1;
for(int i = 1;i<=f;++i){
if(tax[i].empty())continue;
val[i] = tax[i][0];
int prev = i;
adj[par[i]].erase(i);
adj[i].erase(par[i]);
for(int j = 1;j<tax[i].size();++j){
adj[p].insert(prev);
adj[prev].insert(p);
val[p] = tax[i][j];
prev = p;
p++;
}
adj[prev].insert(par[i]);
adj[par[i]].insert(prev);
}
dfs(1,-1);
init(2*n+1);
segtree st;
st.init(2*n+1);
vector<pair<int,int>>feed={{0,0}};
for(int i = 1;i<=n;++i){
if(val[i]){
st.set(in[i],1);
st.set(out[i],-1);
feed.pb({val[i],i});
}
}
sort(all(feed));
vector<int>root(mxn+1);
for(int i = 1;i<feed.size();++i){
int prev_root = root[i-1];
int curr_root = ++ptr;
int u = feed[i].second;
root[i] = curr_root;
upd(curr_root,prev_root,in[u],{feed[i].first,1});
curr_root = ++ptr;
prev_root = root[i];
upd(curr_root,prev_root,out[u],{-feed[i].first,-1});
root[i] = curr_root;
}
int sz = feed.size();
while(q--){
int u,v,g,s;
cin >> u >> v >> g >> s;
if(in[v] < in[u])swap(v,u);
int l = 1, r = sz;
int L = lca(u,v);
int k1 = go(v,dist[v]-dist[L]-1), k2 = 0;
if(u!=L)k2 = go(u,dist[u]-dist[L]-1);
int tot = 0;
if(u==L)tot = st.sol(in[k1],in[v]+1);
else tot=st.sol(in[k1],in[v]+1)+st.sol(in[k2],in[u]+1);
int res = -1;
if(g>=tot)res = g-tot;
while(l<= r){
int m = (l+r)/2;
pair<int,int>get;
if(u==L){
get = sol(root[m],in[k1],in[v]+1);
}else get = merge(sol(root[m],in[k1],in[v]+1),sol(root[m],in[k2],in[u]+1));
if(get.first <= s){
int left = tot-get.second;
res = max(res,max(-1ll,g-left));
l = m+1;
}else r = m-1;
}
cout << res << endl;
}
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
int T=1;
for(int i = 1;i<=T;++i)
{
// cout << "Case #" << i << ": ";
solve();
}
}
Compilation message
currencies.cpp: In function 'void solve()':
currencies.cpp:209:24: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
209 | for(int j = 1;j<tax[i].size();++j){
| ~^~~~~~~~~~~~~~
currencies.cpp:238:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
238 | for(int i = 1;i<feed.size();++i){
| ~^~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
241 ms |
557644 KB |
Output is correct |
2 |
Correct |
231 ms |
557584 KB |
Output is correct |
3 |
Correct |
242 ms |
557620 KB |
Output is correct |
4 |
Correct |
236 ms |
557660 KB |
Output is correct |
5 |
Correct |
264 ms |
559216 KB |
Output is correct |
6 |
Correct |
253 ms |
559536 KB |
Output is correct |
7 |
Correct |
242 ms |
558896 KB |
Output is correct |
8 |
Correct |
260 ms |
559424 KB |
Output is correct |
9 |
Correct |
289 ms |
559468 KB |
Output is correct |
10 |
Correct |
271 ms |
559408 KB |
Output is correct |
11 |
Correct |
263 ms |
559440 KB |
Output is correct |
12 |
Correct |
291 ms |
559476 KB |
Output is correct |
13 |
Correct |
242 ms |
559584 KB |
Output is correct |
14 |
Correct |
271 ms |
559584 KB |
Output is correct |
15 |
Correct |
269 ms |
559464 KB |
Output is correct |
16 |
Correct |
270 ms |
559428 KB |
Output is correct |
17 |
Correct |
259 ms |
559436 KB |
Output is correct |
18 |
Correct |
281 ms |
559408 KB |
Output is correct |
19 |
Correct |
246 ms |
559420 KB |
Output is correct |
20 |
Correct |
278 ms |
559440 KB |
Output is correct |
21 |
Correct |
250 ms |
559392 KB |
Output is correct |
22 |
Correct |
242 ms |
559448 KB |
Output is correct |
23 |
Correct |
258 ms |
559516 KB |
Output is correct |
24 |
Correct |
254 ms |
559560 KB |
Output is correct |
25 |
Correct |
233 ms |
559576 KB |
Output is correct |
26 |
Correct |
230 ms |
559432 KB |
Output is correct |
27 |
Correct |
245 ms |
559468 KB |
Output is correct |
28 |
Correct |
275 ms |
559584 KB |
Output is correct |
29 |
Correct |
227 ms |
559484 KB |
Output is correct |
30 |
Correct |
226 ms |
559440 KB |
Output is correct |
31 |
Correct |
236 ms |
559556 KB |
Output is correct |
32 |
Correct |
241 ms |
559392 KB |
Output is correct |
33 |
Correct |
257 ms |
559580 KB |
Output is correct |
34 |
Correct |
226 ms |
559636 KB |
Output is correct |
35 |
Correct |
230 ms |
559676 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
222 ms |
557600 KB |
Output is correct |
2 |
Correct |
244 ms |
559336 KB |
Output is correct |
3 |
Correct |
234 ms |
559404 KB |
Output is correct |
4 |
Correct |
227 ms |
559480 KB |
Output is correct |
5 |
Correct |
2037 ms |
645432 KB |
Output is correct |
6 |
Correct |
2750 ms |
629212 KB |
Output is correct |
7 |
Correct |
2402 ms |
628604 KB |
Output is correct |
8 |
Correct |
1951 ms |
630056 KB |
Output is correct |
9 |
Correct |
1963 ms |
630992 KB |
Output is correct |
10 |
Correct |
3079 ms |
649196 KB |
Output is correct |
11 |
Correct |
3076 ms |
649320 KB |
Output is correct |
12 |
Correct |
3063 ms |
649200 KB |
Output is correct |
13 |
Correct |
3109 ms |
649412 KB |
Output is correct |
14 |
Correct |
3367 ms |
649532 KB |
Output is correct |
15 |
Correct |
2972 ms |
657348 KB |
Output is correct |
16 |
Correct |
2907 ms |
657712 KB |
Output is correct |
17 |
Correct |
2880 ms |
657196 KB |
Output is correct |
18 |
Correct |
3676 ms |
651232 KB |
Output is correct |
19 |
Correct |
3694 ms |
651300 KB |
Output is correct |
20 |
Correct |
3676 ms |
651400 KB |
Output is correct |
21 |
Correct |
1519 ms |
650072 KB |
Output is correct |
22 |
Correct |
1462 ms |
650140 KB |
Output is correct |
23 |
Correct |
1415 ms |
650040 KB |
Output is correct |
24 |
Correct |
1483 ms |
650004 KB |
Output is correct |
25 |
Correct |
2054 ms |
655100 KB |
Output is correct |
26 |
Correct |
2037 ms |
655080 KB |
Output is correct |
27 |
Correct |
2130 ms |
655040 KB |
Output is correct |
28 |
Correct |
1689 ms |
650552 KB |
Output is correct |
29 |
Correct |
1298 ms |
650476 KB |
Output is correct |
30 |
Correct |
2019 ms |
650636 KB |
Output is correct |
31 |
Correct |
1973 ms |
650656 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
221 ms |
557608 KB |
Output is correct |
2 |
Correct |
229 ms |
559616 KB |
Output is correct |
3 |
Correct |
227 ms |
559564 KB |
Output is correct |
4 |
Correct |
237 ms |
559520 KB |
Output is correct |
5 |
Correct |
1536 ms |
636568 KB |
Output is correct |
6 |
Correct |
1518 ms |
629736 KB |
Output is correct |
7 |
Correct |
2202 ms |
630136 KB |
Output is correct |
8 |
Correct |
2535 ms |
652136 KB |
Output is correct |
9 |
Correct |
2516 ms |
652132 KB |
Output is correct |
10 |
Correct |
2520 ms |
652000 KB |
Output is correct |
11 |
Correct |
1937 ms |
654980 KB |
Output is correct |
12 |
Correct |
2272 ms |
654952 KB |
Output is correct |
13 |
Correct |
2027 ms |
655488 KB |
Output is correct |
14 |
Correct |
1331 ms |
652500 KB |
Output is correct |
15 |
Correct |
1252 ms |
652336 KB |
Output is correct |
16 |
Correct |
1504 ms |
652540 KB |
Output is correct |
17 |
Correct |
1475 ms |
652552 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
241 ms |
557644 KB |
Output is correct |
2 |
Correct |
231 ms |
557584 KB |
Output is correct |
3 |
Correct |
242 ms |
557620 KB |
Output is correct |
4 |
Correct |
236 ms |
557660 KB |
Output is correct |
5 |
Correct |
264 ms |
559216 KB |
Output is correct |
6 |
Correct |
253 ms |
559536 KB |
Output is correct |
7 |
Correct |
242 ms |
558896 KB |
Output is correct |
8 |
Correct |
260 ms |
559424 KB |
Output is correct |
9 |
Correct |
289 ms |
559468 KB |
Output is correct |
10 |
Correct |
271 ms |
559408 KB |
Output is correct |
11 |
Correct |
263 ms |
559440 KB |
Output is correct |
12 |
Correct |
291 ms |
559476 KB |
Output is correct |
13 |
Correct |
242 ms |
559584 KB |
Output is correct |
14 |
Correct |
271 ms |
559584 KB |
Output is correct |
15 |
Correct |
269 ms |
559464 KB |
Output is correct |
16 |
Correct |
270 ms |
559428 KB |
Output is correct |
17 |
Correct |
259 ms |
559436 KB |
Output is correct |
18 |
Correct |
281 ms |
559408 KB |
Output is correct |
19 |
Correct |
246 ms |
559420 KB |
Output is correct |
20 |
Correct |
278 ms |
559440 KB |
Output is correct |
21 |
Correct |
250 ms |
559392 KB |
Output is correct |
22 |
Correct |
242 ms |
559448 KB |
Output is correct |
23 |
Correct |
258 ms |
559516 KB |
Output is correct |
24 |
Correct |
254 ms |
559560 KB |
Output is correct |
25 |
Correct |
233 ms |
559576 KB |
Output is correct |
26 |
Correct |
230 ms |
559432 KB |
Output is correct |
27 |
Correct |
245 ms |
559468 KB |
Output is correct |
28 |
Correct |
275 ms |
559584 KB |
Output is correct |
29 |
Correct |
227 ms |
559484 KB |
Output is correct |
30 |
Correct |
226 ms |
559440 KB |
Output is correct |
31 |
Correct |
236 ms |
559556 KB |
Output is correct |
32 |
Correct |
241 ms |
559392 KB |
Output is correct |
33 |
Correct |
257 ms |
559580 KB |
Output is correct |
34 |
Correct |
226 ms |
559636 KB |
Output is correct |
35 |
Correct |
230 ms |
559676 KB |
Output is correct |
36 |
Correct |
222 ms |
557600 KB |
Output is correct |
37 |
Correct |
244 ms |
559336 KB |
Output is correct |
38 |
Correct |
234 ms |
559404 KB |
Output is correct |
39 |
Correct |
227 ms |
559480 KB |
Output is correct |
40 |
Correct |
2037 ms |
645432 KB |
Output is correct |
41 |
Correct |
2750 ms |
629212 KB |
Output is correct |
42 |
Correct |
2402 ms |
628604 KB |
Output is correct |
43 |
Correct |
1951 ms |
630056 KB |
Output is correct |
44 |
Correct |
1963 ms |
630992 KB |
Output is correct |
45 |
Correct |
3079 ms |
649196 KB |
Output is correct |
46 |
Correct |
3076 ms |
649320 KB |
Output is correct |
47 |
Correct |
3063 ms |
649200 KB |
Output is correct |
48 |
Correct |
3109 ms |
649412 KB |
Output is correct |
49 |
Correct |
3367 ms |
649532 KB |
Output is correct |
50 |
Correct |
2972 ms |
657348 KB |
Output is correct |
51 |
Correct |
2907 ms |
657712 KB |
Output is correct |
52 |
Correct |
2880 ms |
657196 KB |
Output is correct |
53 |
Correct |
3676 ms |
651232 KB |
Output is correct |
54 |
Correct |
3694 ms |
651300 KB |
Output is correct |
55 |
Correct |
3676 ms |
651400 KB |
Output is correct |
56 |
Correct |
1519 ms |
650072 KB |
Output is correct |
57 |
Correct |
1462 ms |
650140 KB |
Output is correct |
58 |
Correct |
1415 ms |
650040 KB |
Output is correct |
59 |
Correct |
1483 ms |
650004 KB |
Output is correct |
60 |
Correct |
2054 ms |
655100 KB |
Output is correct |
61 |
Correct |
2037 ms |
655080 KB |
Output is correct |
62 |
Correct |
2130 ms |
655040 KB |
Output is correct |
63 |
Correct |
1689 ms |
650552 KB |
Output is correct |
64 |
Correct |
1298 ms |
650476 KB |
Output is correct |
65 |
Correct |
2019 ms |
650636 KB |
Output is correct |
66 |
Correct |
1973 ms |
650656 KB |
Output is correct |
67 |
Correct |
221 ms |
557608 KB |
Output is correct |
68 |
Correct |
229 ms |
559616 KB |
Output is correct |
69 |
Correct |
227 ms |
559564 KB |
Output is correct |
70 |
Correct |
237 ms |
559520 KB |
Output is correct |
71 |
Correct |
1536 ms |
636568 KB |
Output is correct |
72 |
Correct |
1518 ms |
629736 KB |
Output is correct |
73 |
Correct |
2202 ms |
630136 KB |
Output is correct |
74 |
Correct |
2535 ms |
652136 KB |
Output is correct |
75 |
Correct |
2516 ms |
652132 KB |
Output is correct |
76 |
Correct |
2520 ms |
652000 KB |
Output is correct |
77 |
Correct |
1937 ms |
654980 KB |
Output is correct |
78 |
Correct |
2272 ms |
654952 KB |
Output is correct |
79 |
Correct |
2027 ms |
655488 KB |
Output is correct |
80 |
Correct |
1331 ms |
652500 KB |
Output is correct |
81 |
Correct |
1252 ms |
652336 KB |
Output is correct |
82 |
Correct |
1504 ms |
652540 KB |
Output is correct |
83 |
Correct |
1475 ms |
652552 KB |
Output is correct |
84 |
Correct |
2104 ms |
640476 KB |
Output is correct |
85 |
Correct |
2322 ms |
625428 KB |
Output is correct |
86 |
Correct |
2051 ms |
610048 KB |
Output is correct |
87 |
Correct |
3150 ms |
650684 KB |
Output is correct |
88 |
Correct |
3068 ms |
650308 KB |
Output is correct |
89 |
Correct |
3044 ms |
650568 KB |
Output is correct |
90 |
Correct |
3144 ms |
650668 KB |
Output is correct |
91 |
Correct |
3034 ms |
650688 KB |
Output is correct |
92 |
Correct |
3242 ms |
655452 KB |
Output is correct |
93 |
Correct |
3033 ms |
656728 KB |
Output is correct |
94 |
Correct |
3565 ms |
651164 KB |
Output is correct |
95 |
Correct |
3686 ms |
651124 KB |
Output is correct |
96 |
Correct |
3635 ms |
651184 KB |
Output is correct |
97 |
Correct |
3637 ms |
651224 KB |
Output is correct |
98 |
Correct |
1981 ms |
650184 KB |
Output is correct |
99 |
Correct |
1997 ms |
650308 KB |
Output is correct |
100 |
Correct |
1983 ms |
649940 KB |
Output is correct |
101 |
Correct |
1902 ms |
650088 KB |
Output is correct |
102 |
Correct |
2545 ms |
655156 KB |
Output is correct |
103 |
Correct |
2713 ms |
654972 KB |
Output is correct |
104 |
Correct |
2591 ms |
655172 KB |
Output is correct |
105 |
Correct |
1724 ms |
650804 KB |
Output is correct |
106 |
Correct |
1620 ms |
650528 KB |
Output is correct |
107 |
Correct |
1742 ms |
650568 KB |
Output is correct |
108 |
Correct |
1829 ms |
650616 KB |
Output is correct |