Submission #1305580

#TimeUsernameProblemLanguageResultExecution timeMemory
1305580coolboy19521Swapping Cities (APIO20_swap)C++20
0 / 100
2096 ms10772 KiB
#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; while(not q.empty()){ int u=q.front(); q.pop(); 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++; 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 (cnt>=2 or loc[Y]<INT_MAX))r=mi-1,bs=mi; else l=mi+1; } return bs; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...