#include <bits/stdc++.h>
#define fr(i, n, m) for(int i = (n); i < (m); i ++)
#define rfr(i, n, m) for(int i = (n); i >= (m); i --)
#define pb push_back
#define st first
#define nd second
#define pq priority_queue
#define all(x) begin(x), end(x)
#include <time.h>
#include <cmath>
#include <deque>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
const int i_inf = 1e9+1;
const ll inf = 2e18;
const ll mod = 998244353;
const ld eps = 1e-13;
const ld pi = 3.14159265359;
const int mxn = 1e5+5;
mt19937 _rand(time(NULL));
#include "swap.h"
vector<pii> g[mxn];
int n, m;
int sparse[mxn][20];
int mis[mxn][20];
int mxw[mxn][20];
int depth[mxn];
int minc[mxn];
void dfs(int u, int p, int val, int val2){
sparse[u][0] = p;
fr(i, 1, 20) sparse[u][i] = sparse[sparse[u][i-1]][i-1];
mis[u][0] = val;
fr(i, 1, 20) mis[u][i] = min(mis[u][i-1], mis[sparse[u][i-1]][i-1]);
mxw[u][0] = val2;
fr(i, 1, 20) mxw[u][i] = max(mxw[u][i-1], mxw[sparse[u][i-1]][i-1]);
int mi1 = i_inf, c1 = -1;
int mi2 = i_inf;
for(auto e : g[u]){
if(e.st == p) continue;
if(e.nd < mi1){
mi2 = mi1;
mi1 = e.nd;
c1 = e.st;
}
else if(e.nd < mi2){
mi2 = e.nd;
}
}
for(auto e : g[u]){
if(e.st == p) continue;
depth[e.st] = depth[u] + 1;
if(e.st != c1){
dfs(e.st, u, mi1, e.nd);
}
else{
dfs(e.st, u, mi2, e.nd);
}
}
}
int lca(int a, int b){
int mind = min(depth[a], depth[b]);
for(int i = 19; i >= 0; i --){
if(depth[a] - (1<<i) >= mind) a = sparse[a][i];
if(depth[b] - (1<<i) >= mind) b = sparse[b][i];
}
if(a == b) return a;
for(int i = 19; i >= 0; i --){
if(sparse[a][i] != sparse[b][i]){
a = sparse[a][i];
b = sparse[b][i];
}
}
return sparse[a][0];
}
pii best_spot(int u, int p){
int ret = minc[u];
for(int i = 19; i >= 0; i --){
if(depth[u] - (1<<i) > depth[p]){
ret = min(ret, mis[u][i]);
u = sparse[u][i];
}
}
return {u, ret};
}
int cost(int u, int p){
int ret = 0;
for(int i = 19; i >= 0; i --){
if(depth[u] - (1<<i) >= depth[p]){
ret = max(ret, mxw[u][i]);
u = sparse[u][i];
}
}
return ret;
}
void init(int N, int M, vector<int> U, vector<int> V, vector<int> W){
n = N, m = M;
fr(i, 0, m){
g[U[i]].pb({V[i], W[i]});
g[V[i]].pb({U[i], W[i]});
}
fr(i, 0, n){
sort(all(g[i]), [](const pii A, const pii B){
return A.nd < B.nd;
});
}
dfs(0, 0, i_inf, i_inf);
fr(i, 0, n){
minc[i] = i_inf;
int cnt = 0;
for(auto u : g[i]){
if(u.st == sparse[i][0]) continue;
++cnt;
if(cnt == 2){
minc[i] = u.nd;
break;
}
}
}
}
int con = 0;
int getMinimumFuelCapacity(int X, int Y) {
int k = lca(X, Y);
if(X == k){
pii bs = best_spot(Y, k);
int w1 = bs.nd;
int x = bs.st;
int spot = w1;
int c = cost(Y, k);
int cnt = 0;
for(auto u : g[k]){
if(u.st == x) continue;
++cnt;
if(cnt == 2){
spot = min(spot, u.nd);
break;
}
}
int tc = max(spot, c);
if(tc == i_inf) tc = -1;
return tc;
}
else if(Y == k){
pii bs = best_spot(X, k);
int w1 = bs.nd;
int x = bs.st;
int spot = w1;
int c = cost(X, k);
int cnt = 0;
for(auto u : g[k]){
if(u.st == x) continue;
++cnt;
if(cnt == 2){
spot = min(spot, u.nd);
break;
}
}
int tc = max(spot, c);
if(tc == i_inf) tc = -1;
return tc;
}
else{
pii bs1 = best_spot(X, k);
pii bs2 = best_spot(Y, k);
int x = bs1.st;
int w1 = bs1.nd;
int y = bs2.st;
int w2 = bs2.nd;
int spot = min(w1, w2);
for(auto u : g[k]){
if(u.st == x || u.st == y) continue;
spot = min(spot, u.nd);
break;
}
int c1 = cost(X, k);
int c2 = cost(Y, k);
int tc = max(spot, max(c1, c2));
if(tc == i_inf) tc = -1;
return tc;
}
}/*
int main(){
freopen("inp.txt", "r",stdin);
//freopen("out.txt", "w", stdout);
cin >> n >> m;
vector<int> U(m);
vector<int> V(m);
vector<int> W(m);
fr(i, 0, m){
cin >> U[i] >> V[i] >> W[i];
}
init(n, m, U, V, W);cout<<"LOL"<<endl;
int cc;
cin >> cc;
int line = -1;
while(cc--){
int i, j;
cin >> i >> j;
if(i == 0) line = con;
getMinimumFuelCapacity(i, j);
++con;
}
cout<<line<<endl;
}
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2668 KB |
Output is correct |
2 |
Correct |
2 ms |
2668 KB |
Output is correct |
3 |
Correct |
3 ms |
2668 KB |
Output is correct |
4 |
Correct |
2 ms |
2796 KB |
Output is correct |
5 |
Correct |
3 ms |
3052 KB |
Output is correct |
6 |
Correct |
3 ms |
3052 KB |
Output is correct |
7 |
Correct |
4 ms |
3052 KB |
Output is correct |
8 |
Correct |
3 ms |
3052 KB |
Output is correct |
9 |
Correct |
158 ms |
30724 KB |
Output is correct |
10 |
Correct |
228 ms |
38244 KB |
Output is correct |
11 |
Correct |
199 ms |
37092 KB |
Output is correct |
12 |
Correct |
222 ms |
39396 KB |
Output is correct |
13 |
Correct |
255 ms |
41160 KB |
Output is correct |
14 |
Correct |
199 ms |
30180 KB |
Output is correct |
15 |
Correct |
695 ms |
39968 KB |
Output is correct |
16 |
Correct |
678 ms |
37536 KB |
Output is correct |
17 |
Correct |
655 ms |
42904 KB |
Output is correct |
18 |
Correct |
664 ms |
41540 KB |
Output is correct |
19 |
Execution timed out |
2094 ms |
184248 KB |
Time limit exceeded |
20 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2668 KB |
Output is correct |
2 |
Correct |
2 ms |
2668 KB |
Output is correct |
3 |
Correct |
298 ms |
35324 KB |
Output is correct |
4 |
Correct |
325 ms |
36368 KB |
Output is correct |
5 |
Correct |
321 ms |
35556 KB |
Output is correct |
6 |
Correct |
306 ms |
36296 KB |
Output is correct |
7 |
Correct |
331 ms |
36060 KB |
Output is correct |
8 |
Correct |
311 ms |
34624 KB |
Output is correct |
9 |
Correct |
303 ms |
35620 KB |
Output is correct |
10 |
Correct |
305 ms |
34580 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1778 ms |
524292 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1778 ms |
524292 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2668 KB |
Output is correct |
2 |
Correct |
2 ms |
2668 KB |
Output is correct |
3 |
Correct |
3 ms |
2668 KB |
Output is correct |
4 |
Correct |
2 ms |
2796 KB |
Output is correct |
5 |
Correct |
3 ms |
3052 KB |
Output is correct |
6 |
Correct |
3 ms |
3052 KB |
Output is correct |
7 |
Correct |
4 ms |
3052 KB |
Output is correct |
8 |
Correct |
3 ms |
3052 KB |
Output is correct |
9 |
Correct |
158 ms |
30724 KB |
Output is correct |
10 |
Correct |
228 ms |
38244 KB |
Output is correct |
11 |
Correct |
199 ms |
37092 KB |
Output is correct |
12 |
Correct |
222 ms |
39396 KB |
Output is correct |
13 |
Correct |
255 ms |
41160 KB |
Output is correct |
14 |
Correct |
199 ms |
30180 KB |
Output is correct |
15 |
Correct |
695 ms |
39968 KB |
Output is correct |
16 |
Correct |
678 ms |
37536 KB |
Output is correct |
17 |
Correct |
655 ms |
42904 KB |
Output is correct |
18 |
Correct |
664 ms |
41540 KB |
Output is correct |
19 |
Correct |
298 ms |
35324 KB |
Output is correct |
20 |
Correct |
325 ms |
36368 KB |
Output is correct |
21 |
Correct |
321 ms |
35556 KB |
Output is correct |
22 |
Correct |
306 ms |
36296 KB |
Output is correct |
23 |
Correct |
331 ms |
36060 KB |
Output is correct |
24 |
Correct |
311 ms |
34624 KB |
Output is correct |
25 |
Correct |
303 ms |
35620 KB |
Output is correct |
26 |
Correct |
305 ms |
34580 KB |
Output is correct |
27 |
Correct |
4 ms |
3164 KB |
Output is correct |
28 |
Correct |
4 ms |
3044 KB |
Output is correct |
29 |
Correct |
3 ms |
3068 KB |
Output is correct |
30 |
Correct |
3 ms |
3028 KB |
Output is correct |
31 |
Correct |
3 ms |
2924 KB |
Output is correct |
32 |
Incorrect |
3 ms |
3052 KB |
Output isn't correct |
33 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1778 ms |
524292 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |