#include<bits/stdc++.h>
using namespace std;
namespace Solve
{
const int M = 1e5 + 1;
const int Srt = 500;
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;
bool vis[2000001];
vector<int> list[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)
{
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);
}
}
}
void Update(int pos, long long val)
{
pos += (1 << 17);
while(pos)
{
Sum[pos] += val;
node[pos] += val > 0 ? 1 : -1;
pos >>= 1;
}
}
void Up(int id)
{
if(!vis[id])
{
Update(id, get<0>(idVal[id]));
}
else
{
Update(id, -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++)
{
long long 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:120:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::tuple<long long int, long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
120 | for(int i = 1; i < idVal.size(); i++)
| ~~^~~~~~~~~~~~~~
currencies.cpp: At global scope:
currencies.cpp:189:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
189 | main()
| ^~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
14940 KB |
Output is correct |
2 |
Correct |
2 ms |
14936 KB |
Output is correct |
3 |
Correct |
2 ms |
10840 KB |
Output is correct |
4 |
Correct |
3 ms |
14940 KB |
Output is correct |
5 |
Correct |
7 ms |
15196 KB |
Output is correct |
6 |
Correct |
12 ms |
15196 KB |
Output is correct |
7 |
Correct |
10 ms |
15196 KB |
Output is correct |
8 |
Correct |
10 ms |
15196 KB |
Output is correct |
9 |
Correct |
11 ms |
15196 KB |
Output is correct |
10 |
Correct |
10 ms |
15380 KB |
Output is correct |
11 |
Correct |
10 ms |
15196 KB |
Output is correct |
12 |
Correct |
10 ms |
15376 KB |
Output is correct |
13 |
Correct |
9 ms |
15700 KB |
Output is correct |
14 |
Correct |
8 ms |
15452 KB |
Output is correct |
15 |
Correct |
9 ms |
15196 KB |
Output is correct |
16 |
Correct |
8 ms |
15196 KB |
Output is correct |
17 |
Correct |
9 ms |
15192 KB |
Output is correct |
18 |
Correct |
9 ms |
15416 KB |
Output is correct |
19 |
Correct |
10 ms |
15196 KB |
Output is correct |
20 |
Correct |
9 ms |
15380 KB |
Output is correct |
21 |
Correct |
9 ms |
15196 KB |
Output is correct |
22 |
Correct |
9 ms |
15196 KB |
Output is correct |
23 |
Correct |
4 ms |
15196 KB |
Output is correct |
24 |
Correct |
5 ms |
15368 KB |
Output is correct |
25 |
Correct |
5 ms |
15196 KB |
Output is correct |
26 |
Correct |
4 ms |
15196 KB |
Output is correct |
27 |
Correct |
4 ms |
15196 KB |
Output is correct |
28 |
Correct |
5 ms |
15260 KB |
Output is correct |
29 |
Correct |
5 ms |
15192 KB |
Output is correct |
30 |
Correct |
10 ms |
15192 KB |
Output is correct |
31 |
Correct |
10 ms |
15196 KB |
Output is correct |
32 |
Correct |
10 ms |
15192 KB |
Output is correct |
33 |
Correct |
9 ms |
15448 KB |
Output is correct |
34 |
Correct |
9 ms |
15452 KB |
Output is correct |
35 |
Correct |
9 ms |
15452 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
14940 KB |
Output is correct |
2 |
Correct |
10 ms |
15376 KB |
Output is correct |
3 |
Correct |
10 ms |
15196 KB |
Output is correct |
4 |
Correct |
10 ms |
15372 KB |
Output is correct |
5 |
Correct |
1552 ms |
29372 KB |
Output is correct |
6 |
Correct |
1429 ms |
30808 KB |
Output is correct |
7 |
Correct |
1051 ms |
28396 KB |
Output is correct |
8 |
Correct |
915 ms |
26048 KB |
Output is correct |
9 |
Correct |
994 ms |
28280 KB |
Output is correct |
10 |
Correct |
2037 ms |
32160 KB |
Output is correct |
11 |
Correct |
2017 ms |
33876 KB |
Output is correct |
12 |
Correct |
1985 ms |
33768 KB |
Output is correct |
13 |
Correct |
2011 ms |
32100 KB |
Output is correct |
14 |
Correct |
2008 ms |
32996 KB |
Output is correct |
15 |
Correct |
1544 ms |
39904 KB |
Output is correct |
16 |
Correct |
1596 ms |
41848 KB |
Output is correct |
17 |
Correct |
870 ms |
39316 KB |
Output is correct |
18 |
Correct |
1854 ms |
31604 KB |
Output is correct |
19 |
Correct |
1907 ms |
31384 KB |
Output is correct |
20 |
Correct |
1852 ms |
33156 KB |
Output is correct |
21 |
Correct |
1502 ms |
30756 KB |
Output is correct |
22 |
Correct |
1496 ms |
32300 KB |
Output is correct |
23 |
Correct |
1514 ms |
32492 KB |
Output is correct |
24 |
Correct |
1538 ms |
33076 KB |
Output is correct |
25 |
Correct |
319 ms |
31896 KB |
Output is correct |
26 |
Correct |
256 ms |
31612 KB |
Output is correct |
27 |
Correct |
152 ms |
32808 KB |
Output is correct |
28 |
Correct |
103 ms |
31540 KB |
Output is correct |
29 |
Correct |
117 ms |
31844 KB |
Output is correct |
30 |
Correct |
1601 ms |
32032 KB |
Output is correct |
31 |
Correct |
1600 ms |
31940 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
10844 KB |
Output is correct |
2 |
Correct |
8 ms |
15452 KB |
Output is correct |
3 |
Correct |
9 ms |
15548 KB |
Output is correct |
4 |
Correct |
8 ms |
15452 KB |
Output is correct |
5 |
Correct |
503 ms |
34468 KB |
Output is correct |
6 |
Correct |
431 ms |
34548 KB |
Output is correct |
7 |
Correct |
846 ms |
34632 KB |
Output is correct |
8 |
Correct |
961 ms |
40528 KB |
Output is correct |
9 |
Correct |
966 ms |
41484 KB |
Output is correct |
10 |
Correct |
970 ms |
40832 KB |
Output is correct |
11 |
Correct |
258 ms |
42132 KB |
Output is correct |
12 |
Correct |
288 ms |
40232 KB |
Output is correct |
13 |
Correct |
282 ms |
40044 KB |
Output is correct |
14 |
Correct |
112 ms |
42000 KB |
Output is correct |
15 |
Correct |
114 ms |
42360 KB |
Output is correct |
16 |
Correct |
618 ms |
40568 KB |
Output is correct |
17 |
Correct |
613 ms |
40980 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
14940 KB |
Output is correct |
2 |
Correct |
2 ms |
14936 KB |
Output is correct |
3 |
Correct |
2 ms |
10840 KB |
Output is correct |
4 |
Correct |
3 ms |
14940 KB |
Output is correct |
5 |
Correct |
7 ms |
15196 KB |
Output is correct |
6 |
Correct |
12 ms |
15196 KB |
Output is correct |
7 |
Correct |
10 ms |
15196 KB |
Output is correct |
8 |
Correct |
10 ms |
15196 KB |
Output is correct |
9 |
Correct |
11 ms |
15196 KB |
Output is correct |
10 |
Correct |
10 ms |
15380 KB |
Output is correct |
11 |
Correct |
10 ms |
15196 KB |
Output is correct |
12 |
Correct |
10 ms |
15376 KB |
Output is correct |
13 |
Correct |
9 ms |
15700 KB |
Output is correct |
14 |
Correct |
8 ms |
15452 KB |
Output is correct |
15 |
Correct |
9 ms |
15196 KB |
Output is correct |
16 |
Correct |
8 ms |
15196 KB |
Output is correct |
17 |
Correct |
9 ms |
15192 KB |
Output is correct |
18 |
Correct |
9 ms |
15416 KB |
Output is correct |
19 |
Correct |
10 ms |
15196 KB |
Output is correct |
20 |
Correct |
9 ms |
15380 KB |
Output is correct |
21 |
Correct |
9 ms |
15196 KB |
Output is correct |
22 |
Correct |
9 ms |
15196 KB |
Output is correct |
23 |
Correct |
4 ms |
15196 KB |
Output is correct |
24 |
Correct |
5 ms |
15368 KB |
Output is correct |
25 |
Correct |
5 ms |
15196 KB |
Output is correct |
26 |
Correct |
4 ms |
15196 KB |
Output is correct |
27 |
Correct |
4 ms |
15196 KB |
Output is correct |
28 |
Correct |
5 ms |
15260 KB |
Output is correct |
29 |
Correct |
5 ms |
15192 KB |
Output is correct |
30 |
Correct |
10 ms |
15192 KB |
Output is correct |
31 |
Correct |
10 ms |
15196 KB |
Output is correct |
32 |
Correct |
10 ms |
15192 KB |
Output is correct |
33 |
Correct |
9 ms |
15448 KB |
Output is correct |
34 |
Correct |
9 ms |
15452 KB |
Output is correct |
35 |
Correct |
9 ms |
15452 KB |
Output is correct |
36 |
Correct |
2 ms |
14940 KB |
Output is correct |
37 |
Correct |
10 ms |
15376 KB |
Output is correct |
38 |
Correct |
10 ms |
15196 KB |
Output is correct |
39 |
Correct |
10 ms |
15372 KB |
Output is correct |
40 |
Correct |
1552 ms |
29372 KB |
Output is correct |
41 |
Correct |
1429 ms |
30808 KB |
Output is correct |
42 |
Correct |
1051 ms |
28396 KB |
Output is correct |
43 |
Correct |
915 ms |
26048 KB |
Output is correct |
44 |
Correct |
994 ms |
28280 KB |
Output is correct |
45 |
Correct |
2037 ms |
32160 KB |
Output is correct |
46 |
Correct |
2017 ms |
33876 KB |
Output is correct |
47 |
Correct |
1985 ms |
33768 KB |
Output is correct |
48 |
Correct |
2011 ms |
32100 KB |
Output is correct |
49 |
Correct |
2008 ms |
32996 KB |
Output is correct |
50 |
Correct |
1544 ms |
39904 KB |
Output is correct |
51 |
Correct |
1596 ms |
41848 KB |
Output is correct |
52 |
Correct |
870 ms |
39316 KB |
Output is correct |
53 |
Correct |
1854 ms |
31604 KB |
Output is correct |
54 |
Correct |
1907 ms |
31384 KB |
Output is correct |
55 |
Correct |
1852 ms |
33156 KB |
Output is correct |
56 |
Correct |
1502 ms |
30756 KB |
Output is correct |
57 |
Correct |
1496 ms |
32300 KB |
Output is correct |
58 |
Correct |
1514 ms |
32492 KB |
Output is correct |
59 |
Correct |
1538 ms |
33076 KB |
Output is correct |
60 |
Correct |
319 ms |
31896 KB |
Output is correct |
61 |
Correct |
256 ms |
31612 KB |
Output is correct |
62 |
Correct |
152 ms |
32808 KB |
Output is correct |
63 |
Correct |
103 ms |
31540 KB |
Output is correct |
64 |
Correct |
117 ms |
31844 KB |
Output is correct |
65 |
Correct |
1601 ms |
32032 KB |
Output is correct |
66 |
Correct |
1600 ms |
31940 KB |
Output is correct |
67 |
Correct |
2 ms |
10844 KB |
Output is correct |
68 |
Correct |
8 ms |
15452 KB |
Output is correct |
69 |
Correct |
9 ms |
15548 KB |
Output is correct |
70 |
Correct |
8 ms |
15452 KB |
Output is correct |
71 |
Correct |
503 ms |
34468 KB |
Output is correct |
72 |
Correct |
431 ms |
34548 KB |
Output is correct |
73 |
Correct |
846 ms |
34632 KB |
Output is correct |
74 |
Correct |
961 ms |
40528 KB |
Output is correct |
75 |
Correct |
966 ms |
41484 KB |
Output is correct |
76 |
Correct |
970 ms |
40832 KB |
Output is correct |
77 |
Correct |
258 ms |
42132 KB |
Output is correct |
78 |
Correct |
288 ms |
40232 KB |
Output is correct |
79 |
Correct |
282 ms |
40044 KB |
Output is correct |
80 |
Correct |
112 ms |
42000 KB |
Output is correct |
81 |
Correct |
114 ms |
42360 KB |
Output is correct |
82 |
Correct |
618 ms |
40568 KB |
Output is correct |
83 |
Correct |
613 ms |
40980 KB |
Output is correct |
84 |
Correct |
1801 ms |
28940 KB |
Output is correct |
85 |
Correct |
1537 ms |
28712 KB |
Output is correct |
86 |
Correct |
885 ms |
26120 KB |
Output is correct |
87 |
Correct |
2156 ms |
31816 KB |
Output is correct |
88 |
Correct |
2161 ms |
32252 KB |
Output is correct |
89 |
Correct |
2138 ms |
33216 KB |
Output is correct |
90 |
Correct |
2161 ms |
33656 KB |
Output is correct |
91 |
Correct |
2172 ms |
32888 KB |
Output is correct |
92 |
Correct |
1061 ms |
37496 KB |
Output is correct |
93 |
Correct |
1027 ms |
39236 KB |
Output is correct |
94 |
Correct |
2153 ms |
31368 KB |
Output is correct |
95 |
Correct |
2164 ms |
31628 KB |
Output is correct |
96 |
Correct |
2176 ms |
31508 KB |
Output is correct |
97 |
Correct |
2214 ms |
31332 KB |
Output is correct |
98 |
Correct |
2033 ms |
31876 KB |
Output is correct |
99 |
Correct |
2009 ms |
31668 KB |
Output is correct |
100 |
Correct |
2016 ms |
32292 KB |
Output is correct |
101 |
Correct |
2048 ms |
32776 KB |
Output is correct |
102 |
Correct |
205 ms |
31280 KB |
Output is correct |
103 |
Correct |
219 ms |
31216 KB |
Output is correct |
104 |
Correct |
552 ms |
32112 KB |
Output is correct |
105 |
Correct |
107 ms |
32432 KB |
Output is correct |
106 |
Correct |
107 ms |
32300 KB |
Output is correct |
107 |
Correct |
1745 ms |
31744 KB |
Output is correct |
108 |
Correct |
1738 ms |
32552 KB |
Output is correct |