Submission #948454

#TimeUsernameProblemLanguageResultExecution timeMemory
948454irmuunDreaming (IOI13_dreaming)C++17
100 / 100
64 ms15048 KiB
#include<bits/stdc++.h> #include "dreaming.h" using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() const int maxn=1e5+5; vector<pair<int,int>>adj[maxn]; vector<int>d(maxn),ver; vector<bool>used(maxn); int dist,mx,vr[3]; void dfs(int x,int p,int e){ used[x]=true; if(e==0){ ver.pb(x); } if(dist>mx){ mx=dist; vr[e]=x; } for(auto [y,w]:adj[x]){ if(y!=p){ dist+=w; dfs(y,x,e); dist-=w; } } } void calc(int x,int p){ d[x]=max(d[x],dist); mx=max(mx,dist); for(auto [y,w]:adj[x]){ if(y!=p){ dist+=w; calc(y,x); dist-=w; } } } int travelTime(int N,int M,int L,int A[],int B[],int T[]){ for(int i=0;i<M;i++){ adj[A[i]].pb({B[i],T[i]}); adj[B[i]].pb({A[i],T[i]}); } vector<int>v,u; for(int i=0;i<N;i++){ if(!used[i]){ ver.clear(); mx=-1,dist=0; dfs(i,-1,0); mx=-1,dist=0; dfs(vr[0],-1,1); mx=0,dist=0; calc(vr[0],-1); mx=0,dist=0; calc(vr[1],-1); v.pb(mx); int mn=1e9; for(auto j:ver){ mn=min(mn,d[j]); } u.pb(mn); } } if(v.size()==1){ return v[0]; } if(v.size()==2){ return max({v[0],v[1],u[0]+u[1]+L}); } int D=0,ans=1e9; for(auto x:v){ D=max(D,x); } multiset<int,greater<int>>st; for(auto x:u){ st.insert(x); } for(auto x:u){ st.erase(st.find(x)); auto it=st.begin(); it++; ans=min(ans,max(x+*st.begin()+L,*st.begin()+*it+2*L)); st.insert(x); } ans=max(ans,D); 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...