// khodaya khodet komak kon
# include <bits/stdc++.h>
/*
// ordered_set
# include <ext/pb_ds/assoc_container.hpp>
# include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
# define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
*/
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair <pll, ll> ppi;
typedef pair <int, pii> pip;
typedef pair <pii, pii> ppp;
# define A first
# define B second
# define endl '\n'
# define sep ' '
# define all(x) x.begin(), x.end()
# define kill(x) return cout << x << endl, 0
# define SZ(x) int(x.size())
# define lc id << 1
# define rc id << 1 | 1
# define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
ll power(ll a, ll b, ll md) {return (!b ? 1 : (b & 1 ? a * power(a * a % md, b / 2, md) % md : power(a * a % md, b / 2, md) % md));}
const int xn = 2e5 + 10;
const int xm = 10 + 10;
const int sq = 320;
const int inf = 1e9 + 10;
const ll INF = 1e18 + 10;
const int mod = 1e9 + 7;//998244353;
const int base = 257;
int dsu[xn], sz[xn], par[xm][xn];
int H[xn], mn[xn], a[xn], wp[xn];
pii mx[xm][xn];
bool inmst[xn];
set <pii> st[xn], ts[xn], S[xn], T[xn];
vector <pip> E;
vector <pii> adj[xn], G[xn], vec;
int get_root(int v){
if (v == dsu[v])
return v;
return dsu[v] = get_root(dsu[v]);
}
void preDFS(int v){
for (int i = 1; i < xm; ++ i){
par[i][v] = par[i - 1][par[i - 1][v]];
mx[i][v].A = max(mx[i - 1][v].A, mx[i - 1][par[i - 1][v]].A);
mx[i][v].B = min(mx[i - 1][v].B, mx[i - 1][par[i - 1][v]].B);
}
vec.clear();
for (pii u : adj[v])
if (u.A != par[0][v])
vec.push_back({E[u.B].A, u.A}), S[v].insert({E[u.B].A, u.A});
sort(all(vec));
for (int i = 1; i < SZ(vec); ++ i)
mx[0][vec[i].B].B = min(mn[v], vec[0].A);
if (SZ(vec))
mx[0][vec[0].B].B = mn[v];
if (SZ(vec) > 1)
mx[0][vec[0].B].B = min(mn[v], vec[1].A);
a[v] = inf;
int ted = 0;
for (pii x : T[v]){
++ ted;
if (ted == 3){
a[v] = x.A;
break;
}
}
for (pii u : adj[v]){
if (u.A == par[0][v])
continue;
par[0][u.A] = v;
mx[0][u.A].A = E[u.B].A;
H[u.A] = H[v] + 1;
wp[u.A] = E[u.B].A;
preDFS(u.A);
a[v] = min(a[v], max(a[u.A], E[u.B].A));
}
}
int LCA(int v, int u){
if (H[v] > H[u])
swap(v, u);
for (int i = xm - 1; i >= 0; -- i)
if ((1 << i) <= H[u] - H[v])
u = par[i][u];
if (v == u)
return v;
for (int i = xm - 1; i >= 0; -- i)
if (par[i][v] != par[i][u])
v = par[i][v], u = par[i][u];
return par[0][v];
}
void merge(int v, int u){
v = get_root(v);
u = get_root(u);
if (sz[v] < sz[u])
swap(v, u);
dsu[u] = v, sz[v] += sz[u];
for (pii x : st[u])
st[v].insert(x);
}
void DFS(int v){
for (pii u : adj[v])
if (u.A != par[0][v])
DFS(u.A), merge(v, u.A);
int rt = get_root(v);
for (pii u : G[v]){
int lca = LCA(v, u.A);
st[rt].insert({E[u.B].A, u.B});
ts[lca].insert({E[u.B].A, u.B});
}
for (pii x : ts[v])
st[rt].erase(x);
if (SZ(st[rt]))
a[v] = min(a[v], st[rt].begin() -> A);
}
void init(int n, int m, vector <int> V, vector <int> U, vector <int> W){
for (int i = 1; i <= n; ++ i)
dsu[i] = i, sz[i] = 1;
for (int i = 0; i < m; ++ i){
int v = V[i] + 1, u = U[i] + 1, w = W[i];
E.push_back({w, {v, u}});
}
sort(all(E));
for (int i = 0; i < m; ++ i){
pip e = E[i];
int v = e.B.A, u = e.B.B, w = e.A;
int pv = v, pu = u;
T[v].insert({w, u});
T[u].insert({w, v});
v = get_root(v);
u = get_root(u);
if (v == u){
G[pv].push_back({pu, i});
G[pu].push_back({pv, i});
continue;
}
if (sz[v] < sz[u])
swap(v, u);
inmst[i] = true;
dsu[u] = v, sz[v] += sz[u];
adj[pv].push_back({pu, i});
adj[pu].push_back({pv, i});
}
for (int i = 1; i <= n; ++ i){
dsu[i] = i, sz[i] = 1;
mn[i] = inf;
for (pii u : G[i])
mn[i] = min(mn[i], E[u.B].A);
}
preDFS(1), DFS(1);
}
int getMinimumFuelCapacity(int v, int u){
++ v, ++ u;
int lca = LCA(v, u), res = inf, ans = 0;
int pv = v, pu = u;
if (H[v] > H[u])
swap(v, u);
for (int i = xm - 1; i >= 0; -- i){
if (H[u] - H[v] < (1 << i))
continue;
if (H[u] - H[v] == (1 << i) && v == lca)
continue;
ans = max(ans, mx[i][u].A);
res = min(res, mx[i][u].B);
u = par[i][u];
}
if (v == lca){
ans = max(ans, mx[0][u].A);
res = min(res, mn[lca]);
u = v;
}
for (int i = xm - 1; i >= 0; -- i){
if (par[i][v] == par[i][u])
continue;
ans = max(ans, mx[i][v].A);
res = min(res, mx[i][v].B);
ans = max(ans, mx[i][u].A);
res = min(res, mx[i][u].B);
v = par[i][v], u = par[i][u];
}
if (v != u){
ans = max(ans, mx[0][v].A);
ans = max(ans, mx[0][u].A);
res = min(res, mn[lca]);
for (pii x : S[lca]){
if (x.B != v && x.B != u){
res = min(res, x.A);
break;
}
}
if (lca - 1)
res = min(res, wp[lca]);
}
v = pv, u = pu;
res = min(res, min(a[v], a[u]));
if (res == inf)
return - 1;
return max(ans, res);
}
/*
int n, m, q;
vector <int> V, U, W;
int main(){
InTheNameOfGod;
cin >> n >> m;
for (int i = 0; i < m; ++ i){
int v, u, w;
cin >> v >> u >> w;
V.push_back(v);
U.push_back(u);
W.push_back(w);
}
init(n, m, V, U, W);
cin >> q;
while (q --){
int v, u;
cin >> v >> u;
cout << getMinimumFuelCapacity(v, u) << endl;
}
return 0;
}
5 6
0 1 4
0 2 4
1 4 10
1 3 2
1 2 1
2 3 3
3
1 2
2 4
0 1
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
47560 KB |
Output is correct |
2 |
Correct |
29 ms |
47560 KB |
Output is correct |
3 |
Correct |
29 ms |
47564 KB |
Output is correct |
4 |
Correct |
28 ms |
47712 KB |
Output is correct |
5 |
Correct |
30 ms |
48064 KB |
Output is correct |
6 |
Correct |
29 ms |
47948 KB |
Output is correct |
7 |
Correct |
30 ms |
48004 KB |
Output is correct |
8 |
Correct |
31 ms |
48076 KB |
Output is correct |
9 |
Correct |
362 ms |
90944 KB |
Output is correct |
10 |
Correct |
486 ms |
103012 KB |
Output is correct |
11 |
Correct |
465 ms |
101212 KB |
Output is correct |
12 |
Correct |
480 ms |
104872 KB |
Output is correct |
13 |
Correct |
402 ms |
108040 KB |
Output is correct |
14 |
Correct |
439 ms |
89732 KB |
Output is correct |
15 |
Correct |
961 ms |
104660 KB |
Output is correct |
16 |
Correct |
970 ms |
100272 KB |
Output is correct |
17 |
Correct |
971 ms |
109812 KB |
Output is correct |
18 |
Correct |
877 ms |
107356 KB |
Output is correct |
19 |
Correct |
200 ms |
60624 KB |
Output is correct |
20 |
Correct |
985 ms |
104664 KB |
Output is correct |
21 |
Correct |
930 ms |
101340 KB |
Output is correct |
22 |
Correct |
987 ms |
107096 KB |
Output is correct |
23 |
Correct |
971 ms |
107840 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
47560 KB |
Output is correct |
2 |
Correct |
29 ms |
47560 KB |
Output is correct |
3 |
Correct |
501 ms |
96092 KB |
Output is correct |
4 |
Correct |
515 ms |
98528 KB |
Output is correct |
5 |
Correct |
509 ms |
97000 KB |
Output is correct |
6 |
Correct |
505 ms |
98200 KB |
Output is correct |
7 |
Correct |
537 ms |
97704 KB |
Output is correct |
8 |
Correct |
494 ms |
95792 KB |
Output is correct |
9 |
Correct |
518 ms |
97412 KB |
Output is correct |
10 |
Correct |
495 ms |
95360 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
47560 KB |
Output is correct |
2 |
Correct |
29 ms |
47560 KB |
Output is correct |
3 |
Correct |
29 ms |
47564 KB |
Output is correct |
4 |
Correct |
28 ms |
47712 KB |
Output is correct |
5 |
Correct |
30 ms |
48064 KB |
Output is correct |
6 |
Correct |
29 ms |
47948 KB |
Output is correct |
7 |
Correct |
30 ms |
48004 KB |
Output is correct |
8 |
Correct |
31 ms |
48076 KB |
Output is correct |
9 |
Correct |
29 ms |
47548 KB |
Output is correct |
10 |
Correct |
30 ms |
47924 KB |
Output is correct |
11 |
Correct |
32 ms |
48056 KB |
Output is correct |
12 |
Correct |
32 ms |
47916 KB |
Output is correct |
13 |
Correct |
30 ms |
47948 KB |
Output is correct |
14 |
Correct |
30 ms |
47884 KB |
Output is correct |
15 |
Incorrect |
30 ms |
48056 KB |
Output isn't correct |
16 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
47548 KB |
Output is correct |
2 |
Correct |
29 ms |
47560 KB |
Output is correct |
3 |
Correct |
29 ms |
47560 KB |
Output is correct |
4 |
Correct |
29 ms |
47564 KB |
Output is correct |
5 |
Correct |
28 ms |
47712 KB |
Output is correct |
6 |
Correct |
30 ms |
48064 KB |
Output is correct |
7 |
Correct |
29 ms |
47948 KB |
Output is correct |
8 |
Correct |
30 ms |
48004 KB |
Output is correct |
9 |
Correct |
31 ms |
48076 KB |
Output is correct |
10 |
Correct |
362 ms |
90944 KB |
Output is correct |
11 |
Correct |
486 ms |
103012 KB |
Output is correct |
12 |
Correct |
465 ms |
101212 KB |
Output is correct |
13 |
Correct |
480 ms |
104872 KB |
Output is correct |
14 |
Correct |
402 ms |
108040 KB |
Output is correct |
15 |
Correct |
30 ms |
47924 KB |
Output is correct |
16 |
Correct |
32 ms |
48056 KB |
Output is correct |
17 |
Correct |
32 ms |
47916 KB |
Output is correct |
18 |
Correct |
30 ms |
47948 KB |
Output is correct |
19 |
Correct |
30 ms |
47884 KB |
Output is correct |
20 |
Incorrect |
30 ms |
48056 KB |
Output isn't correct |
21 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
47560 KB |
Output is correct |
2 |
Correct |
29 ms |
47560 KB |
Output is correct |
3 |
Correct |
29 ms |
47564 KB |
Output is correct |
4 |
Correct |
28 ms |
47712 KB |
Output is correct |
5 |
Correct |
30 ms |
48064 KB |
Output is correct |
6 |
Correct |
29 ms |
47948 KB |
Output is correct |
7 |
Correct |
30 ms |
48004 KB |
Output is correct |
8 |
Correct |
31 ms |
48076 KB |
Output is correct |
9 |
Correct |
362 ms |
90944 KB |
Output is correct |
10 |
Correct |
486 ms |
103012 KB |
Output is correct |
11 |
Correct |
465 ms |
101212 KB |
Output is correct |
12 |
Correct |
480 ms |
104872 KB |
Output is correct |
13 |
Correct |
402 ms |
108040 KB |
Output is correct |
14 |
Correct |
439 ms |
89732 KB |
Output is correct |
15 |
Correct |
961 ms |
104660 KB |
Output is correct |
16 |
Correct |
970 ms |
100272 KB |
Output is correct |
17 |
Correct |
971 ms |
109812 KB |
Output is correct |
18 |
Correct |
877 ms |
107356 KB |
Output is correct |
19 |
Correct |
501 ms |
96092 KB |
Output is correct |
20 |
Correct |
515 ms |
98528 KB |
Output is correct |
21 |
Correct |
509 ms |
97000 KB |
Output is correct |
22 |
Correct |
505 ms |
98200 KB |
Output is correct |
23 |
Correct |
537 ms |
97704 KB |
Output is correct |
24 |
Correct |
494 ms |
95792 KB |
Output is correct |
25 |
Correct |
518 ms |
97412 KB |
Output is correct |
26 |
Correct |
495 ms |
95360 KB |
Output is correct |
27 |
Correct |
30 ms |
47924 KB |
Output is correct |
28 |
Correct |
32 ms |
48056 KB |
Output is correct |
29 |
Correct |
32 ms |
47916 KB |
Output is correct |
30 |
Correct |
30 ms |
47948 KB |
Output is correct |
31 |
Correct |
30 ms |
47884 KB |
Output is correct |
32 |
Incorrect |
30 ms |
48056 KB |
Output isn't correct |
33 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
47548 KB |
Output is correct |
2 |
Correct |
29 ms |
47560 KB |
Output is correct |
3 |
Correct |
29 ms |
47560 KB |
Output is correct |
4 |
Correct |
29 ms |
47564 KB |
Output is correct |
5 |
Correct |
28 ms |
47712 KB |
Output is correct |
6 |
Correct |
30 ms |
48064 KB |
Output is correct |
7 |
Correct |
29 ms |
47948 KB |
Output is correct |
8 |
Correct |
30 ms |
48004 KB |
Output is correct |
9 |
Correct |
31 ms |
48076 KB |
Output is correct |
10 |
Correct |
362 ms |
90944 KB |
Output is correct |
11 |
Correct |
486 ms |
103012 KB |
Output is correct |
12 |
Correct |
465 ms |
101212 KB |
Output is correct |
13 |
Correct |
480 ms |
104872 KB |
Output is correct |
14 |
Correct |
402 ms |
108040 KB |
Output is correct |
15 |
Correct |
439 ms |
89732 KB |
Output is correct |
16 |
Correct |
961 ms |
104660 KB |
Output is correct |
17 |
Correct |
970 ms |
100272 KB |
Output is correct |
18 |
Correct |
971 ms |
109812 KB |
Output is correct |
19 |
Correct |
877 ms |
107356 KB |
Output is correct |
20 |
Correct |
501 ms |
96092 KB |
Output is correct |
21 |
Correct |
515 ms |
98528 KB |
Output is correct |
22 |
Correct |
509 ms |
97000 KB |
Output is correct |
23 |
Correct |
505 ms |
98200 KB |
Output is correct |
24 |
Correct |
537 ms |
97704 KB |
Output is correct |
25 |
Correct |
494 ms |
95792 KB |
Output is correct |
26 |
Correct |
518 ms |
97412 KB |
Output is correct |
27 |
Correct |
495 ms |
95360 KB |
Output is correct |
28 |
Correct |
30 ms |
47924 KB |
Output is correct |
29 |
Correct |
32 ms |
48056 KB |
Output is correct |
30 |
Correct |
32 ms |
47916 KB |
Output is correct |
31 |
Correct |
30 ms |
47948 KB |
Output is correct |
32 |
Correct |
30 ms |
47884 KB |
Output is correct |
33 |
Incorrect |
30 ms |
48056 KB |
Output isn't correct |
34 |
Halted |
0 ms |
0 KB |
- |