//baby do u kno what u wanna hearrrr
#include "swap.h"
#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> par[100005];
int h[100005];
int valid[100005];
int deg[100005];
int fpar(int x, int ct) {
//find parent with time <= ct
auto it = --upper_bound(par[x].begin(), par[x].end(), make_pair(ct, INT_MAX));
//cout << x;
return (it->second == x ? x : fpar(it->second, ct));
}
vector<int> wws;
void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) {
for(int i=0;i<N;i++) {
valid[i] = INT_MAX;
par[i].clear(); h[i] = 0;
par[i].emplace_back(0, i);
//time 0 === parent = i
deg[i] = 0;
}
wws = W; wws.push_back(0);
sort(wws.begin(), wws.end());
vector<int> edgord(M); iota(edgord.begin(), edgord.end(), 0);
sort(edgord.begin(), edgord.end(), [&](int a, int b) {
return W[a] < W[b];
});
for(int i=0;i<M;i++) {
//at time i+1, add the i-th edge
int a = fpar(U[edgord[i]], M), b = fpar(V[edgord[i]], M);
if(a == b) {
//formed cycle!!
valid[a] = min(valid[a], i+1);
} else {
deg[U[edgord[i]]]++; deg[V[edgord[i]]]++;
int na = a;
if(h[a] > h[b]) {
par[b].emplace_back(i+1, a);
} else {
par[a].emplace_back(i+1, b);
na = b;
h[b]++;
}
if(min(valid[a], valid[b]) < INT_MAX) valid[na] = min(valid[na], i+1);
if(max(deg[U[edgord[i]]], deg[V[edgord[i]]]) > 2) valid[na] = min(valid[na], i+1);
}
}
}
int getMinimumFuelCapacity(int X, int Y) {
//bsearch for first time
int l=0, r=wws.size(), mid;
while(l < r) {
mid = (l+r) >> 1;
int a = fpar(X, mid), b = fpar(Y, mid);
if(a != b || mid < valid[a]) l = mid+1;
else r = mid;
}
//cout << l << '\n';
return (l>=wws.size()?-1:wws[l]);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |