Submission #795155

#TimeUsernameProblemLanguageResultExecution timeMemory
795155KhizriDreaming (IOI13_dreaming)C++17
100 / 100
60 ms17176 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define F first #define S second #define INF 1e18 #define all(v) (v).begin(),(v).end() #define rall(v) (v).rbegin(),(v).rend() #define pii pair<int,int> #define pll pair<ll,ll> #define OK cout<<"Ok"<<endl; #define MOD (ll)(1e9+7) const int mxn=1e5+5; int n,m,color[mxn],mx,node,node2,res,l[mxn]; vector<pii>vt[mxn]; void dfs(int u,int p,int dis){ if(dis>=mx){ mx=dis; node=u; } color[u]=1; for(pii v:vt[u]){ if(v.F!=p){ dfs(v.F,u,dis+v.S); } } } void dfs2(int u,int p,int dis){ l[u]=dis; if(dis>=mx){ mx=dis; node2=u; } for(pii v:vt[u]){ if(v.F!=p){ dfs2(v.F,u,dis+v.S); } } } bool dfs3(int u,int p,int dis){ int q=0; if(u==node) q=1; for(pii v:vt[u]){ if(v.F!=p&&dfs3(v.F,u,dis+v.S)){ q=1; res=min(res,max(l[v.F],dis+v.S)); } } return q; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { n=N,m=M; for(int i=0;i<m;i++){ vt[A[i]+1].pb({B[i]+1,T[i]}); vt[B[i]+1].pb({A[i]+1,T[i]}); } vector<int>vtt; int ans=0; for(int i=1;i<=n;i++){ if(color[i]) continue; mx=0,node=0; dfs(i,-1,0); mx=0,node2=0; dfs2(node,-1,0); res=mx; ans=max(ans,mx); dfs3(node2,-1,0); vtt.pb(res); } sort(rall(vtt)); if(vtt.size()==1) return max(ans,vtt[0]); ans=max(ans,vtt[0]+vtt[1]+L); if(vtt.size()>2){ ans=max(ans,vtt[1]+vtt[2]+2*L); } return ans; }
#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...