Submission #1272185

#TimeUsernameProblemLanguageResultExecution timeMemory
1272185StefanSebezSwapping Cities (APIO20_swap)C++20
0 / 100
2 ms568 KiB
#include "swap.h" #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long #define ld long double const int N=1e5+50,inf=1e9+50; vector<pair<int,int>>E[N]; int n,m; int Val[N]; void init(int n1,int m1,vector<int>U,vector<int>V,vector<int>W) { n=n1,m=m1; for(int i=0;i<m;i++){ E[U[i]].pb({V[i],W[i]}); E[V[i]].pb({U[i],W[i]}); } for(int i=0;i<n;i++){ sort(E[i].begin(),E[i].end(),[&](pair<int,int>a,pair<int,int>b){return a.se<b.se;}); if(E[i].size()<3) Val[i]=inf; else Val[i]=E[i][2].se; } } bool was[N],ciklus; int par[N]; void DFS(int u,int mid,int p=-1){ was[u]=true; for(auto [v,w]:E[u]){ if(w>mid) continue; if(was[v]&&v!=p) ciklus=true; if(!was[v]){ par[v]=u; DFS(v,mid,u); } } } int getMinimumFuelCapacity(int X,int Y) { int l=0,r=inf,res=-1; while(l<=r){ int mid=l+r>>1; for(int i=0;i<=n;i++) was[i]=false,par[i]=0;ciklus=false; DFS(X,mid); if(!was[Y]){l=mid+1;continue;} if(ciklus){res=mid;r=mid-1;continue;} int mn=inf; int v=par[Y]; while(v!=X){ mn=min(mn,Val[v]); v=par[v]; } if(mn<=mid){res=mid;r=mid-1;} else l=mid+1; } return res; }
#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...