#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef __int128 lll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
#define MAX 9223372036854775807LL
#define MIN -9223372036854775807LL
#define INF 0x3f3f3f3f3f3f3f3f
#define fi first
#define se second
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cout << fixed; cout.precision(10);
#define sp << " "
#define en << "\n"
#define compress(v) sort(v.begin(), v.end()), v.erase(unique(v.begin(), v.end()), v.end())
struct gujo
{
ll S, T, X, Y;
};
ll n, m, q;
ll all, bll;
pll edg[100010];
pll cost[100010];
vector<ll> vec[100010];
gujo qry[100010];
ll l[100010], r[100010], mid[100010];
ll IN[100010], OUT[100010], cc;
ll spa[100010][21], dep[100010];
ll ans[100010];
struct fenwicktree
{
ll bit[100010];
void init(void)
{
for(ll i = 1 ; i <= n ; i++)
bit[i] = 0;
}
void update(ll w, ll v)
{
for(ll i = w ; i <= n ; i += (i & (-i)))
bit[i] += v;
}
ll query(ll w)
{
ll ret = 0;
for(ll i = w ; i >= 1 ; i -= (i & (-i)))
ret += bit[i];
return ret;
}
}BIT;
void dfs0(ll here, ll pa)
{
IN[here] = ++cc;
spa[here][0] = pa;
dep[here] = dep[pa] + 1;
for(auto &i : vec[here])
{
if(i == pa)
continue;
dfs0(i, here);
}
OUT[here] = cc;
}
ll LCA(ll X, ll Y)
{
if(dep[X] < dep[Y])
swap(X, Y);
ll cha = dep[X] - dep[Y];
for(ll i = 20 ; i >= 0 ; i--)
{
if(cha >= (1LL << i))
{
cha -= (1LL << i);
X = spa[X][i];
}
}
if(X == Y)
return X;
for(ll i = 20 ; i >= 0 ; i--)
{
if(spa[X][i] != spa[Y][i])
{
X = spa[X][i];
Y = spa[Y][i];
}
}
return spa[X][0];
}
int main(void)
{
fastio
cin >> n >> m >> q;
for(ll i = 1 ; i < n ; i++)
{
cin >> all >> bll;
edg[i] = {all, bll};
vec[all].push_back(bll);
vec[bll].push_back(all);
}
for(ll i = 1 ; i <= m ; i++)
{
cin >> all >> bll;
cost[i] = {bll, all};
}
sort(cost + 1, cost + 1 + m);
for(ll i = 1 ; i <= q ; i++)
cin >> qry[i].S >> qry[i].T >> qry[i].X >> qry[i].Y;
dfs0(1, 0);
for(ll i = 1 ; i < n ; i++)
{
if(dep[edg[i].fi] < dep[edg[i].se])
swap(edg[i].fi, edg[i].se);
}
for(ll i = 1 ; i <= 20 ; i++)
{
for(ll j = 1 ; j <= n ; j++)
spa[j][i] = spa[spa[j][i - 1]][i - 1];
}
for(ll i = 1 ; i <= q ; i++)
l[i] = 1, r[i] = m;
for(ll o = 0 ; o <= 20 ; o++)
{
vector<pll> Q;
for(ll i = 1 ; i <= q ; i++)
{
mid[i] = (l[i] + r[i]) >> 1;
if(l[i] <= r[i])
Q.push_back({mid[i], i});
}
if(Q.empty())
break;
BIT.init();
sort(Q.begin(), Q.end());
ll p = 0;
for(ll i = 1 ; i <= m ; i++)
{
pll V = edg[cost[i].se];
BIT.update(IN[V.fi], cost[i].fi);
BIT.update(OUT[V.fi] + 1, -cost[i].fi);
while(p < (ll)Q.size() && Q[p].fi <= i)
{
ll num = Q[p].se;
ll gap = 0;
gap = BIT.query(IN[qry[num].S]) + BIT.query(IN[qry[num].T]) - 2 * BIT.query(IN[LCA(qry[num].S, qry[num].T)]);
if(gap > qry[num].Y)
r[num] = mid[num] - 1;
else
l[num] = mid[num] + 1;
p++;
}
}
}
vector<pll> Q;
for(ll i = 1 ; i <= q ; i++)
Q.push_back({r[i], i});
sort(Q.begin(), Q.end());
BIT.init();
ll p = 0;
while(p < (ll)Q.size() && Q[p].fi <= 0)
{
ll num = Q[p].se;
ll gap = 0;
ans[num] -= BIT.query(IN[qry[num].S]) + BIT.query(IN[qry[num].T]) - 2 * BIT.query(IN[LCA(qry[num].S, qry[num].T)]);
p++;
}
for(ll i = 1 ; i <= m ; i++)
{
pll V = edg[cost[i].se];
BIT.update(IN[V.fi], 1);
BIT.update(OUT[V.fi] + 1, -1);
while(p < (ll)Q.size() && Q[p].fi <= i)
{
ll num = Q[p].se;
ll gap = 0;
ans[num] -= BIT.query(IN[qry[num].S]) + BIT.query(IN[qry[num].T]) - 2 * BIT.query(IN[LCA(qry[num].S, qry[num].T)]);
p++;
}
}
for(ll i = 1 ; i <= q ; i++)
ans[i] += BIT.query(IN[qry[i].S]) + BIT.query(IN[qry[i].T]) - 2 * BIT.query(IN[LCA(qry[i].S, qry[i].T)]);
for(ll i = 1 ; i <= q ; i++)
{
if(ans[i] > qry[i].X)
cout << -1 en;
else
cout << qry[i].X - ans[i] en;
}
return 0;
}
Compilation message
currencies.cpp: In function 'int main()':
currencies.cpp:210:6: warning: unused variable 'gap' [-Wunused-variable]
210 | ll gap = 0;
| ^~~
currencies.cpp:226:7: warning: unused variable 'gap' [-Wunused-variable]
226 | ll gap = 0;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10588 KB |
Output is correct |
2 |
Correct |
2 ms |
10588 KB |
Output is correct |
3 |
Correct |
2 ms |
10588 KB |
Output is correct |
4 |
Correct |
2 ms |
10588 KB |
Output is correct |
5 |
Correct |
7 ms |
10844 KB |
Output is correct |
6 |
Correct |
10 ms |
12888 KB |
Output is correct |
7 |
Correct |
10 ms |
12892 KB |
Output is correct |
8 |
Correct |
11 ms |
13128 KB |
Output is correct |
9 |
Correct |
10 ms |
12892 KB |
Output is correct |
10 |
Correct |
11 ms |
13404 KB |
Output is correct |
11 |
Correct |
10 ms |
12892 KB |
Output is correct |
12 |
Correct |
11 ms |
12892 KB |
Output is correct |
13 |
Correct |
9 ms |
13148 KB |
Output is correct |
14 |
Correct |
10 ms |
13152 KB |
Output is correct |
15 |
Correct |
11 ms |
13148 KB |
Output is correct |
16 |
Correct |
10 ms |
13148 KB |
Output is correct |
17 |
Correct |
11 ms |
12892 KB |
Output is correct |
18 |
Correct |
10 ms |
12924 KB |
Output is correct |
19 |
Correct |
10 ms |
12892 KB |
Output is correct |
20 |
Correct |
11 ms |
13116 KB |
Output is correct |
21 |
Correct |
9 ms |
12892 KB |
Output is correct |
22 |
Correct |
9 ms |
12928 KB |
Output is correct |
23 |
Correct |
10 ms |
12888 KB |
Output is correct |
24 |
Correct |
9 ms |
13116 KB |
Output is correct |
25 |
Correct |
10 ms |
12892 KB |
Output is correct |
26 |
Correct |
9 ms |
12892 KB |
Output is correct |
27 |
Correct |
9 ms |
12888 KB |
Output is correct |
28 |
Correct |
9 ms |
13020 KB |
Output is correct |
29 |
Correct |
9 ms |
12892 KB |
Output is correct |
30 |
Correct |
10 ms |
12892 KB |
Output is correct |
31 |
Correct |
10 ms |
12892 KB |
Output is correct |
32 |
Correct |
10 ms |
12892 KB |
Output is correct |
33 |
Correct |
8 ms |
13148 KB |
Output is correct |
34 |
Correct |
9 ms |
13388 KB |
Output is correct |
35 |
Correct |
9 ms |
13148 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10588 KB |
Output is correct |
2 |
Correct |
10 ms |
13100 KB |
Output is correct |
3 |
Correct |
10 ms |
13100 KB |
Output is correct |
4 |
Correct |
11 ms |
12892 KB |
Output is correct |
5 |
Correct |
797 ms |
41708 KB |
Output is correct |
6 |
Correct |
1000 ms |
37844 KB |
Output is correct |
7 |
Correct |
1059 ms |
40408 KB |
Output is correct |
8 |
Correct |
747 ms |
39304 KB |
Output is correct |
9 |
Correct |
703 ms |
38028 KB |
Output is correct |
10 |
Correct |
1480 ms |
44476 KB |
Output is correct |
11 |
Correct |
1378 ms |
44608 KB |
Output is correct |
12 |
Correct |
1485 ms |
44804 KB |
Output is correct |
13 |
Correct |
1411 ms |
44600 KB |
Output is correct |
14 |
Correct |
1371 ms |
44624 KB |
Output is correct |
15 |
Correct |
2086 ms |
49028 KB |
Output is correct |
16 |
Correct |
2557 ms |
49220 KB |
Output is correct |
17 |
Correct |
2318 ms |
48580 KB |
Output is correct |
18 |
Correct |
2085 ms |
44336 KB |
Output is correct |
19 |
Correct |
1951 ms |
44324 KB |
Output is correct |
20 |
Correct |
1810 ms |
44344 KB |
Output is correct |
21 |
Correct |
1166 ms |
43844 KB |
Output is correct |
22 |
Correct |
1222 ms |
44192 KB |
Output is correct |
23 |
Correct |
1160 ms |
44244 KB |
Output is correct |
24 |
Correct |
1159 ms |
44264 KB |
Output is correct |
25 |
Correct |
1037 ms |
45204 KB |
Output is correct |
26 |
Correct |
1032 ms |
44960 KB |
Output is correct |
27 |
Correct |
984 ms |
45004 KB |
Output is correct |
28 |
Correct |
589 ms |
44364 KB |
Output is correct |
29 |
Correct |
564 ms |
44260 KB |
Output is correct |
30 |
Correct |
697 ms |
44424 KB |
Output is correct |
31 |
Correct |
698 ms |
44648 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10584 KB |
Output is correct |
2 |
Correct |
8 ms |
13148 KB |
Output is correct |
3 |
Correct |
9 ms |
13144 KB |
Output is correct |
4 |
Correct |
9 ms |
13144 KB |
Output is correct |
5 |
Correct |
1280 ms |
45200 KB |
Output is correct |
6 |
Correct |
1188 ms |
46072 KB |
Output is correct |
7 |
Correct |
822 ms |
36956 KB |
Output is correct |
8 |
Correct |
2053 ms |
49628 KB |
Output is correct |
9 |
Correct |
2158 ms |
49520 KB |
Output is correct |
10 |
Correct |
2552 ms |
49276 KB |
Output is correct |
11 |
Correct |
1052 ms |
49212 KB |
Output is correct |
12 |
Correct |
1165 ms |
49216 KB |
Output is correct |
13 |
Correct |
1080 ms |
49296 KB |
Output is correct |
14 |
Correct |
496 ms |
49124 KB |
Output is correct |
15 |
Correct |
500 ms |
49140 KB |
Output is correct |
16 |
Correct |
838 ms |
49372 KB |
Output is correct |
17 |
Correct |
789 ms |
49412 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10588 KB |
Output is correct |
2 |
Correct |
2 ms |
10588 KB |
Output is correct |
3 |
Correct |
2 ms |
10588 KB |
Output is correct |
4 |
Correct |
2 ms |
10588 KB |
Output is correct |
5 |
Correct |
7 ms |
10844 KB |
Output is correct |
6 |
Correct |
10 ms |
12888 KB |
Output is correct |
7 |
Correct |
10 ms |
12892 KB |
Output is correct |
8 |
Correct |
11 ms |
13128 KB |
Output is correct |
9 |
Correct |
10 ms |
12892 KB |
Output is correct |
10 |
Correct |
11 ms |
13404 KB |
Output is correct |
11 |
Correct |
10 ms |
12892 KB |
Output is correct |
12 |
Correct |
11 ms |
12892 KB |
Output is correct |
13 |
Correct |
9 ms |
13148 KB |
Output is correct |
14 |
Correct |
10 ms |
13152 KB |
Output is correct |
15 |
Correct |
11 ms |
13148 KB |
Output is correct |
16 |
Correct |
10 ms |
13148 KB |
Output is correct |
17 |
Correct |
11 ms |
12892 KB |
Output is correct |
18 |
Correct |
10 ms |
12924 KB |
Output is correct |
19 |
Correct |
10 ms |
12892 KB |
Output is correct |
20 |
Correct |
11 ms |
13116 KB |
Output is correct |
21 |
Correct |
9 ms |
12892 KB |
Output is correct |
22 |
Correct |
9 ms |
12928 KB |
Output is correct |
23 |
Correct |
10 ms |
12888 KB |
Output is correct |
24 |
Correct |
9 ms |
13116 KB |
Output is correct |
25 |
Correct |
10 ms |
12892 KB |
Output is correct |
26 |
Correct |
9 ms |
12892 KB |
Output is correct |
27 |
Correct |
9 ms |
12888 KB |
Output is correct |
28 |
Correct |
9 ms |
13020 KB |
Output is correct |
29 |
Correct |
9 ms |
12892 KB |
Output is correct |
30 |
Correct |
10 ms |
12892 KB |
Output is correct |
31 |
Correct |
10 ms |
12892 KB |
Output is correct |
32 |
Correct |
10 ms |
12892 KB |
Output is correct |
33 |
Correct |
8 ms |
13148 KB |
Output is correct |
34 |
Correct |
9 ms |
13388 KB |
Output is correct |
35 |
Correct |
9 ms |
13148 KB |
Output is correct |
36 |
Correct |
2 ms |
10588 KB |
Output is correct |
37 |
Correct |
10 ms |
13100 KB |
Output is correct |
38 |
Correct |
10 ms |
13100 KB |
Output is correct |
39 |
Correct |
11 ms |
12892 KB |
Output is correct |
40 |
Correct |
797 ms |
41708 KB |
Output is correct |
41 |
Correct |
1000 ms |
37844 KB |
Output is correct |
42 |
Correct |
1059 ms |
40408 KB |
Output is correct |
43 |
Correct |
747 ms |
39304 KB |
Output is correct |
44 |
Correct |
703 ms |
38028 KB |
Output is correct |
45 |
Correct |
1480 ms |
44476 KB |
Output is correct |
46 |
Correct |
1378 ms |
44608 KB |
Output is correct |
47 |
Correct |
1485 ms |
44804 KB |
Output is correct |
48 |
Correct |
1411 ms |
44600 KB |
Output is correct |
49 |
Correct |
1371 ms |
44624 KB |
Output is correct |
50 |
Correct |
2086 ms |
49028 KB |
Output is correct |
51 |
Correct |
2557 ms |
49220 KB |
Output is correct |
52 |
Correct |
2318 ms |
48580 KB |
Output is correct |
53 |
Correct |
2085 ms |
44336 KB |
Output is correct |
54 |
Correct |
1951 ms |
44324 KB |
Output is correct |
55 |
Correct |
1810 ms |
44344 KB |
Output is correct |
56 |
Correct |
1166 ms |
43844 KB |
Output is correct |
57 |
Correct |
1222 ms |
44192 KB |
Output is correct |
58 |
Correct |
1160 ms |
44244 KB |
Output is correct |
59 |
Correct |
1159 ms |
44264 KB |
Output is correct |
60 |
Correct |
1037 ms |
45204 KB |
Output is correct |
61 |
Correct |
1032 ms |
44960 KB |
Output is correct |
62 |
Correct |
984 ms |
45004 KB |
Output is correct |
63 |
Correct |
589 ms |
44364 KB |
Output is correct |
64 |
Correct |
564 ms |
44260 KB |
Output is correct |
65 |
Correct |
697 ms |
44424 KB |
Output is correct |
66 |
Correct |
698 ms |
44648 KB |
Output is correct |
67 |
Correct |
2 ms |
10584 KB |
Output is correct |
68 |
Correct |
8 ms |
13148 KB |
Output is correct |
69 |
Correct |
9 ms |
13144 KB |
Output is correct |
70 |
Correct |
9 ms |
13144 KB |
Output is correct |
71 |
Correct |
1280 ms |
45200 KB |
Output is correct |
72 |
Correct |
1188 ms |
46072 KB |
Output is correct |
73 |
Correct |
822 ms |
36956 KB |
Output is correct |
74 |
Correct |
2053 ms |
49628 KB |
Output is correct |
75 |
Correct |
2158 ms |
49520 KB |
Output is correct |
76 |
Correct |
2552 ms |
49276 KB |
Output is correct |
77 |
Correct |
1052 ms |
49212 KB |
Output is correct |
78 |
Correct |
1165 ms |
49216 KB |
Output is correct |
79 |
Correct |
1080 ms |
49296 KB |
Output is correct |
80 |
Correct |
496 ms |
49124 KB |
Output is correct |
81 |
Correct |
500 ms |
49140 KB |
Output is correct |
82 |
Correct |
838 ms |
49372 KB |
Output is correct |
83 |
Correct |
789 ms |
49412 KB |
Output is correct |
84 |
Correct |
971 ms |
38292 KB |
Output is correct |
85 |
Correct |
968 ms |
33292 KB |
Output is correct |
86 |
Correct |
1061 ms |
32916 KB |
Output is correct |
87 |
Correct |
1953 ms |
44436 KB |
Output is correct |
88 |
Correct |
1761 ms |
44364 KB |
Output is correct |
89 |
Correct |
1679 ms |
44320 KB |
Output is correct |
90 |
Correct |
1688 ms |
44472 KB |
Output is correct |
91 |
Correct |
1714 ms |
44468 KB |
Output is correct |
92 |
Correct |
2436 ms |
47468 KB |
Output is correct |
93 |
Correct |
2267 ms |
48412 KB |
Output is correct |
94 |
Correct |
2150 ms |
44980 KB |
Output is correct |
95 |
Correct |
2212 ms |
44248 KB |
Output is correct |
96 |
Correct |
2196 ms |
44432 KB |
Output is correct |
97 |
Correct |
2164 ms |
44576 KB |
Output is correct |
98 |
Correct |
1363 ms |
44224 KB |
Output is correct |
99 |
Correct |
1338 ms |
44388 KB |
Output is correct |
100 |
Correct |
1351 ms |
44264 KB |
Output is correct |
101 |
Correct |
1367 ms |
44248 KB |
Output is correct |
102 |
Correct |
1141 ms |
44808 KB |
Output is correct |
103 |
Correct |
1129 ms |
45096 KB |
Output is correct |
104 |
Correct |
1407 ms |
44764 KB |
Output is correct |
105 |
Correct |
911 ms |
44480 KB |
Output is correct |
106 |
Correct |
899 ms |
44384 KB |
Output is correct |
107 |
Correct |
1097 ms |
44272 KB |
Output is correct |
108 |
Correct |
903 ms |
44504 KB |
Output is correct |