제출 #954305

#제출 시각아이디문제언어결과실행 시간메모리
954305amirhoseinfar1385자매 도시 (APIO20_swap)C++17
0 / 100
2092 ms19180 KiB
#include "swap.h" #include<bits/stdc++.h> using namespace std; struct yal{ int u,v,w,vas; bool operator <(yal b){ return w<b.w; } int getad(int fu){ return (fu^u^v); } }; const int maxn=100000+10,lg=17; int n,m,wlca[lg][maxn],inf=1e9+5; vector<yal>alle; vector<int>adjt[maxn]; struct dsu{ int par[maxn]; dsu(){ for(int i=0;i<maxn;i++){ par[i]=i; } }; int root(int u){ if(u==par[u]){ return u; } return par[u]=root(par[u]); } int con(int u,int v){ int rootu=root(u),rootv=root(v); if(rootu!=rootv){ par[rootu]=rootv; return 1; }else{ return 0; } } }ds; int av=inf; void init(int N, int M,std::vector<int> U, std::vector<int> V, std::vector<int> W) { n=N; m=M; alle.resize(m); for(int i=0;i<m;i++){ alle[i].u=U[i]; alle[i].v=V[i]; alle[i].w=W[i]; } sort(alle.begin(),alle.end()); for(int i=0;i<m;i++){ if(ds.con(alle[i].u,alle[i].v)){ alle[i].vas=1; adjt[alle[i].u].push_back(i); adjt[alle[i].v].push_back(i); if(adjt[alle[i].u].size()>2||adjt[alle[i].v].size()>2){ av=min(alle[i].w,av); } }else{ av=min(alle[i].w,av); } } } int mx; void dfsres(int u,int had,int par=-1,int len=0){ if(had==u){ mx=len; return ; } for(auto x:adjt[u]){ int v=alle[x].getad(u); if(v==par){ continue; } dfsres(v,had,u,max(len,alle[x].w)); } } int getMinimumFuelCapacity(int X, int Y) { mx=0; dfsres(X,Y); long long ret=max(mx,av); if(ret>=inf){ return -1; } return ret; }
#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...