#include<bits/stdc++.h>
using namespace std;
namespace Solve
{
#define int long long
const int M = 1e5 + 1;
const int Srt = 350;
typedef tuple<long long, long long, long long> ox;
vector<ox> idVal;
long long ans[M];
struct Node
{
int nxt, id;
};
struct Query
{
long long Comp, id, x, y, z, w;
bool operator < (const Query that)
{
if(Comp != that.Comp) return Comp < that.Comp;
if(y != that.y) return y < that.y;
return x < that.x;
}
};
vector<Query> List;
int vis[2000001];
vector<int> list[M];
int h[M], par[M][21];
int timeIn[M], timeOut[M];
vector<long long> valRag;
int timeDFS;
long long Sum[2000001];
long long node[2000001];
int pos[M];
vector<Node> adj[M];
void DFS(int u, int par)
{
h[u] = h[par] + 1;
timeIn[u] = timeDFS++;
pos[u] = valRag.size();
for(auto info: adj[u])
{
if(info.nxt != par)
{
for(auto c: list[info.id]) valRag.push_back(c);
DFS(info.nxt, u);
for(auto c: list[info.id]) valRag.push_back(c);
}
}
timeOut[u] = timeDFS;
}
void Update(int pos, long long val)
{
pos += (1 << 17);
while(pos)
{
Sum[pos] += val;
node[pos] += val > 0 ? 1 : -1;
pos /= 2;
}
}
void Up(int id)
{
if(!vis[id])
{
Update(id, get<0>(idVal[id]));
}
else
{
Update(id, (-1LL) * get<0>(idVal[id]));
}
vis[id] ^= 1;
}
long long cal(int id, long long val)
{
if(id >= (1 << 17))
{
return 0;
}
if(Sum[id * 2] <= val) return cal(id * 2 + 1, val - Sum[2 * id]) + node[2 * id];
else return cal(id * 2, val);
}
void solve()
{
int n, m, q;
cin >> n >> m >> q;
for(int i = 1; i < n; i++)
{
int u, v;
cin >> u >> v;
adj[u].push_back({v, i});
adj[v].push_back({u, i});
}
for(int i = 1; i <= m; i++)
{
long long id, c;
cin >> id >> c;
idVal.push_back({c, id, list[id].size()});
list[id].push_back(c);
}
idVal.push_back({0, -1, -1});
sort(idVal.begin(), idVal.end());
for(int i = 1; i < idVal.size(); i++)
{
auto t = idVal[i];
list[get<1>(t)][get<2>(t)] = i;
}
DFS(1, 1);
for(int i = 1; i <= q; i++)
{
int x, y, z, w;
cin >> x >> y >> z >> w;
x = pos[x];
y = pos[y];
if(x > y) swap(x, y);
List.push_back({x / Srt, i, x, y, z, w});
}
memset(ans, -1, sizeof ans);
sort(List.begin(), List.end());
int l = 0, r = 0;
for(auto info: List)
{
while(l < info.x)
{
Up(valRag[l]);
l++;
}
while(info.x < l)
{
l--;
Up(valRag[l]);
}
while(r < info.y)
{
Up(valRag[r]);
r++;
}
while(info.y < r)
{
r--;
Up(valRag[r]);
}
long long Val = cal(1, info.w);
if(node[1] > info.z + Val)
{
ans[info.id] = -1;
}
else
{
ans[info.id] = info.z + Val - node[1];
}
}
for(int i = 1; i <= q; i++) cout << ans[i] << '\n';
}
}
main()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
cout.tie(NULL);
Solve::solve();
}
Compilation message
currencies.cpp: In function 'void Solve::solve()':
currencies.cpp:127:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::tuple<long long int, long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
127 | for(int i = 1; i < idVal.size(); i++)
| ~~^~~~~~~~~~~~~~
currencies.cpp: At global scope:
currencies.cpp:196:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
196 | main()
| ^~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
19036 KB |
Output is correct |
2 |
Correct |
3 ms |
19036 KB |
Output is correct |
3 |
Correct |
3 ms |
17088 KB |
Output is correct |
4 |
Correct |
3 ms |
19036 KB |
Output is correct |
5 |
Correct |
8 ms |
19292 KB |
Output is correct |
6 |
Correct |
10 ms |
19548 KB |
Output is correct |
7 |
Correct |
9 ms |
19292 KB |
Output is correct |
8 |
Correct |
10 ms |
19548 KB |
Output is correct |
9 |
Correct |
11 ms |
19564 KB |
Output is correct |
10 |
Correct |
10 ms |
19548 KB |
Output is correct |
11 |
Correct |
11 ms |
19548 KB |
Output is correct |
12 |
Correct |
10 ms |
19548 KB |
Output is correct |
13 |
Correct |
9 ms |
19548 KB |
Output is correct |
14 |
Correct |
9 ms |
19692 KB |
Output is correct |
15 |
Correct |
10 ms |
19544 KB |
Output is correct |
16 |
Correct |
9 ms |
19548 KB |
Output is correct |
17 |
Correct |
10 ms |
19592 KB |
Output is correct |
18 |
Correct |
10 ms |
19548 KB |
Output is correct |
19 |
Correct |
10 ms |
19548 KB |
Output is correct |
20 |
Correct |
12 ms |
19552 KB |
Output is correct |
21 |
Correct |
13 ms |
19548 KB |
Output is correct |
22 |
Correct |
10 ms |
19396 KB |
Output is correct |
23 |
Correct |
5 ms |
19548 KB |
Output is correct |
24 |
Correct |
5 ms |
19548 KB |
Output is correct |
25 |
Correct |
5 ms |
19376 KB |
Output is correct |
26 |
Correct |
4 ms |
19548 KB |
Output is correct |
27 |
Correct |
5 ms |
19548 KB |
Output is correct |
28 |
Correct |
6 ms |
19548 KB |
Output is correct |
29 |
Correct |
6 ms |
19548 KB |
Output is correct |
30 |
Correct |
11 ms |
19380 KB |
Output is correct |
31 |
Correct |
10 ms |
19548 KB |
Output is correct |
32 |
Correct |
11 ms |
19320 KB |
Output is correct |
33 |
Correct |
10 ms |
19548 KB |
Output is correct |
34 |
Correct |
9 ms |
19548 KB |
Output is correct |
35 |
Correct |
9 ms |
19544 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
19036 KB |
Output is correct |
2 |
Correct |
10 ms |
19548 KB |
Output is correct |
3 |
Correct |
11 ms |
19544 KB |
Output is correct |
4 |
Correct |
10 ms |
19548 KB |
Output is correct |
5 |
Correct |
2434 ms |
35772 KB |
Output is correct |
6 |
Correct |
2146 ms |
35640 KB |
Output is correct |
7 |
Correct |
1504 ms |
36868 KB |
Output is correct |
8 |
Correct |
1353 ms |
33596 KB |
Output is correct |
9 |
Correct |
1487 ms |
33076 KB |
Output is correct |
10 |
Correct |
3115 ms |
37408 KB |
Output is correct |
11 |
Correct |
3141 ms |
38756 KB |
Output is correct |
12 |
Correct |
3142 ms |
37448 KB |
Output is correct |
13 |
Correct |
3199 ms |
37700 KB |
Output is correct |
14 |
Correct |
3127 ms |
39232 KB |
Output is correct |
15 |
Correct |
2302 ms |
47244 KB |
Output is correct |
16 |
Correct |
2503 ms |
47928 KB |
Output is correct |
17 |
Correct |
1126 ms |
46772 KB |
Output is correct |
18 |
Correct |
2900 ms |
39452 KB |
Output is correct |
19 |
Correct |
2823 ms |
39276 KB |
Output is correct |
20 |
Correct |
2865 ms |
37480 KB |
Output is correct |
21 |
Correct |
2581 ms |
36820 KB |
Output is correct |
22 |
Correct |
2564 ms |
36948 KB |
Output is correct |
23 |
Correct |
2577 ms |
38392 KB |
Output is correct |
24 |
Correct |
2587 ms |
36732 KB |
Output is correct |
25 |
Correct |
507 ms |
37140 KB |
Output is correct |
26 |
Correct |
408 ms |
37496 KB |
Output is correct |
27 |
Correct |
195 ms |
37240 KB |
Output is correct |
28 |
Correct |
108 ms |
39028 KB |
Output is correct |
29 |
Correct |
117 ms |
37224 KB |
Output is correct |
30 |
Correct |
2570 ms |
38780 KB |
Output is correct |
31 |
Correct |
2579 ms |
38128 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
16988 KB |
Output is correct |
2 |
Correct |
9 ms |
19548 KB |
Output is correct |
3 |
Correct |
9 ms |
19548 KB |
Output is correct |
4 |
Correct |
10 ms |
19740 KB |
Output is correct |
5 |
Correct |
569 ms |
43644 KB |
Output is correct |
6 |
Correct |
442 ms |
43948 KB |
Output is correct |
7 |
Correct |
986 ms |
41848 KB |
Output is correct |
8 |
Correct |
1219 ms |
48240 KB |
Output is correct |
9 |
Correct |
1171 ms |
48640 KB |
Output is correct |
10 |
Correct |
1181 ms |
49572 KB |
Output is correct |
11 |
Correct |
337 ms |
49388 KB |
Output is correct |
12 |
Correct |
387 ms |
48164 KB |
Output is correct |
13 |
Correct |
390 ms |
48912 KB |
Output is correct |
14 |
Correct |
110 ms |
48500 KB |
Output is correct |
15 |
Correct |
121 ms |
49044 KB |
Output is correct |
16 |
Correct |
856 ms |
49208 KB |
Output is correct |
17 |
Correct |
854 ms |
49716 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
19036 KB |
Output is correct |
2 |
Correct |
3 ms |
19036 KB |
Output is correct |
3 |
Correct |
3 ms |
17088 KB |
Output is correct |
4 |
Correct |
3 ms |
19036 KB |
Output is correct |
5 |
Correct |
8 ms |
19292 KB |
Output is correct |
6 |
Correct |
10 ms |
19548 KB |
Output is correct |
7 |
Correct |
9 ms |
19292 KB |
Output is correct |
8 |
Correct |
10 ms |
19548 KB |
Output is correct |
9 |
Correct |
11 ms |
19564 KB |
Output is correct |
10 |
Correct |
10 ms |
19548 KB |
Output is correct |
11 |
Correct |
11 ms |
19548 KB |
Output is correct |
12 |
Correct |
10 ms |
19548 KB |
Output is correct |
13 |
Correct |
9 ms |
19548 KB |
Output is correct |
14 |
Correct |
9 ms |
19692 KB |
Output is correct |
15 |
Correct |
10 ms |
19544 KB |
Output is correct |
16 |
Correct |
9 ms |
19548 KB |
Output is correct |
17 |
Correct |
10 ms |
19592 KB |
Output is correct |
18 |
Correct |
10 ms |
19548 KB |
Output is correct |
19 |
Correct |
10 ms |
19548 KB |
Output is correct |
20 |
Correct |
12 ms |
19552 KB |
Output is correct |
21 |
Correct |
13 ms |
19548 KB |
Output is correct |
22 |
Correct |
10 ms |
19396 KB |
Output is correct |
23 |
Correct |
5 ms |
19548 KB |
Output is correct |
24 |
Correct |
5 ms |
19548 KB |
Output is correct |
25 |
Correct |
5 ms |
19376 KB |
Output is correct |
26 |
Correct |
4 ms |
19548 KB |
Output is correct |
27 |
Correct |
5 ms |
19548 KB |
Output is correct |
28 |
Correct |
6 ms |
19548 KB |
Output is correct |
29 |
Correct |
6 ms |
19548 KB |
Output is correct |
30 |
Correct |
11 ms |
19380 KB |
Output is correct |
31 |
Correct |
10 ms |
19548 KB |
Output is correct |
32 |
Correct |
11 ms |
19320 KB |
Output is correct |
33 |
Correct |
10 ms |
19548 KB |
Output is correct |
34 |
Correct |
9 ms |
19548 KB |
Output is correct |
35 |
Correct |
9 ms |
19544 KB |
Output is correct |
36 |
Correct |
3 ms |
19036 KB |
Output is correct |
37 |
Correct |
10 ms |
19548 KB |
Output is correct |
38 |
Correct |
11 ms |
19544 KB |
Output is correct |
39 |
Correct |
10 ms |
19548 KB |
Output is correct |
40 |
Correct |
2434 ms |
35772 KB |
Output is correct |
41 |
Correct |
2146 ms |
35640 KB |
Output is correct |
42 |
Correct |
1504 ms |
36868 KB |
Output is correct |
43 |
Correct |
1353 ms |
33596 KB |
Output is correct |
44 |
Correct |
1487 ms |
33076 KB |
Output is correct |
45 |
Correct |
3115 ms |
37408 KB |
Output is correct |
46 |
Correct |
3141 ms |
38756 KB |
Output is correct |
47 |
Correct |
3142 ms |
37448 KB |
Output is correct |
48 |
Correct |
3199 ms |
37700 KB |
Output is correct |
49 |
Correct |
3127 ms |
39232 KB |
Output is correct |
50 |
Correct |
2302 ms |
47244 KB |
Output is correct |
51 |
Correct |
2503 ms |
47928 KB |
Output is correct |
52 |
Correct |
1126 ms |
46772 KB |
Output is correct |
53 |
Correct |
2900 ms |
39452 KB |
Output is correct |
54 |
Correct |
2823 ms |
39276 KB |
Output is correct |
55 |
Correct |
2865 ms |
37480 KB |
Output is correct |
56 |
Correct |
2581 ms |
36820 KB |
Output is correct |
57 |
Correct |
2564 ms |
36948 KB |
Output is correct |
58 |
Correct |
2577 ms |
38392 KB |
Output is correct |
59 |
Correct |
2587 ms |
36732 KB |
Output is correct |
60 |
Correct |
507 ms |
37140 KB |
Output is correct |
61 |
Correct |
408 ms |
37496 KB |
Output is correct |
62 |
Correct |
195 ms |
37240 KB |
Output is correct |
63 |
Correct |
108 ms |
39028 KB |
Output is correct |
64 |
Correct |
117 ms |
37224 KB |
Output is correct |
65 |
Correct |
2570 ms |
38780 KB |
Output is correct |
66 |
Correct |
2579 ms |
38128 KB |
Output is correct |
67 |
Correct |
2 ms |
16988 KB |
Output is correct |
68 |
Correct |
9 ms |
19548 KB |
Output is correct |
69 |
Correct |
9 ms |
19548 KB |
Output is correct |
70 |
Correct |
10 ms |
19740 KB |
Output is correct |
71 |
Correct |
569 ms |
43644 KB |
Output is correct |
72 |
Correct |
442 ms |
43948 KB |
Output is correct |
73 |
Correct |
986 ms |
41848 KB |
Output is correct |
74 |
Correct |
1219 ms |
48240 KB |
Output is correct |
75 |
Correct |
1171 ms |
48640 KB |
Output is correct |
76 |
Correct |
1181 ms |
49572 KB |
Output is correct |
77 |
Correct |
337 ms |
49388 KB |
Output is correct |
78 |
Correct |
387 ms |
48164 KB |
Output is correct |
79 |
Correct |
390 ms |
48912 KB |
Output is correct |
80 |
Correct |
110 ms |
48500 KB |
Output is correct |
81 |
Correct |
121 ms |
49044 KB |
Output is correct |
82 |
Correct |
856 ms |
49208 KB |
Output is correct |
83 |
Correct |
854 ms |
49716 KB |
Output is correct |
84 |
Correct |
2790 ms |
34552 KB |
Output is correct |
85 |
Correct |
2318 ms |
34624 KB |
Output is correct |
86 |
Correct |
1265 ms |
33136 KB |
Output is correct |
87 |
Correct |
3386 ms |
37324 KB |
Output is correct |
88 |
Correct |
3318 ms |
39444 KB |
Output is correct |
89 |
Correct |
3327 ms |
37544 KB |
Output is correct |
90 |
Correct |
3343 ms |
37492 KB |
Output is correct |
91 |
Correct |
3369 ms |
39376 KB |
Output is correct |
92 |
Correct |
1406 ms |
46128 KB |
Output is correct |
93 |
Correct |
1223 ms |
46764 KB |
Output is correct |
94 |
Correct |
3089 ms |
39044 KB |
Output is correct |
95 |
Correct |
3134 ms |
38260 KB |
Output is correct |
96 |
Correct |
3091 ms |
38312 KB |
Output is correct |
97 |
Correct |
3110 ms |
38452 KB |
Output is correct |
98 |
Correct |
3284 ms |
36860 KB |
Output is correct |
99 |
Correct |
3276 ms |
38660 KB |
Output is correct |
100 |
Correct |
3196 ms |
37160 KB |
Output is correct |
101 |
Correct |
3231 ms |
37168 KB |
Output is correct |
102 |
Correct |
240 ms |
36976 KB |
Output is correct |
103 |
Correct |
264 ms |
37732 KB |
Output is correct |
104 |
Correct |
786 ms |
37472 KB |
Output is correct |
105 |
Correct |
113 ms |
37440 KB |
Output is correct |
106 |
Correct |
138 ms |
37672 KB |
Output is correct |
107 |
Correct |
2742 ms |
37896 KB |
Output is correct |
108 |
Correct |
2731 ms |
37604 KB |
Output is correct |