#include "swap.h"
#include "bits/stdc++.h"
#define FOR(i,a,b)for(int i=(a);i<(b);i++)
#define F0R(i,a)FOR(i,0,a)
#define ROF(i,a,b)for(int i=(b)-1;i>=(a);i--)
#define R0F(i,a)ROF(i,0,a)
#define REP(a)F0R(_,a)
using namespace std;
const int mxn=1e5+20;
vector<pair<int,int>>aj[mxn];
int n;
void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) {
n=N;
F0R(i,M){
aj[U[i]].emplace_back(V[i],W[i]);
aj[V[i]].emplace_back(U[i],W[i]);
}
}
int getMinimumFuelCapacity(int X, int Y) {
int l=1,r=1e9,bs=-1;
while(l<=r){
int mi=(l+r)>>1;
vector<int>dis(n,0),loc(n,INT_MAX);
queue<int>q;
q.push(X);
int cnt=0,aa=0;
while(not q.empty()){
int u=q.front();
q.pop();
aa++;
if(u==Y)continue;
int f=INT_MAX,s=INT_MAX;
for(auto&pr:aj[u])if(pr.second<=mi and dis[pr.first]==0 and pr.first!=X){
if(pr.second<=f)s=f,f=pr.second;
else if(pr.second<s)s=pr.second;
}
for(auto&pr:aj[u])if(pr.second<=mi){
// if(pr.first==Y)cnt++;
cnt++;
if(dis[pr.first]==0 and pr.first!=X){
dis[pr.first]=dis[u]+1;
q.push(pr.first);
if(u!=X){
if(pr.second==f)loc[pr.first]=min({loc[pr.first],loc[u],s});
else loc[pr.first]=min({loc[pr.first],loc[u],f});
}
}
}
}
if(dis[Y]!=0 and (aa==cnt or loc[Y]<INT_MAX))r=mi-1,bs=mi;
else l=mi+1;
}
return bs;
}
| # | 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... |