Submission #916740

#TimeUsernameProblemLanguageResultExecution timeMemory
916740NinedesuDreaming (IOI13_dreaming)C++14
0 / 100
34 ms17212 KiB
#include "dreaming.h" #include<bits/stdc++.h> #define ll long long #define pii pair<ll,int> using namespace std; const int N=1e5+1; int compo; ll a,adis,b,bdis,c,cdis; ll dis[N]; bool chk; bitset<N>vis; vector<pii>adj[N]; void dfs1(int u,int p,bool boo){ vis[u]=true; if(!boo&&dis[u]>adis){ a=u; adis=dis[u]; } else if(boo&&dis[u]>bdis){ b=u; bdis=dis[u]; } //if(boo)cout << u << ',' << dis[u] << ' '; for(pii wv:adj[u]){ ll w=wv.first; int v=wv.second; if(v==p)continue; dis[v]=dis[u]+w; dfs1(v,u,boo); } } void dfs2(int u,int p){ if(u==a){ chk=true; c=u; cdis=bdis; //cout << u << ',' << bdis << ' '; return ; } for(pii wv:adj[u]){ int v=wv.second; if(v==p)continue; dfs2(v,u); if(chk){ //cout << u << ',' << bdis-dis[u] << ' '; if(max(dis[u],bdis-dis[u])<cdis){ c=u; cdis=max(dis[u],bdis-dis[u]); } return ; } } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(int i=0; i<M; i++){ adj[A[i]].push_back({T[i],B[i]}); adj[B[i]].push_back({T[i],A[i]}); } ll mx=0,smx=0,mxb=0; for(int i=0; i<N; i++){ if(vis[i])continue; compo++; a=i; adis=0,bdis=0; chk=false; dis[i]=0; dfs1(i,-1,0); dis[a]=0; b=a,c=a; dfs1(a,-1,1); //cout << bdis << '\n'; dfs2(b,-1); if(cdis>=mx)smx=mx,mx=cdis; else if(cdis>smx)smx=cdis; mxb=max(bdis,mxb); //cout << c << '|' << cdis << "\n\n"; } if(compo>1)return mx+smx+L; else return mxb; }
#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...