Submission #914312

#TimeUsernameProblemLanguageResultExecution timeMemory
914312NinedesuDreaming (IOI13_dreaming)C++17
0 / 100
33 ms15952 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; 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]; } 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; return ; } for(pii wv:adj[u]){ int v=wv.second; if(v==p)continue; dfs2(v,u); if(chk){ 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; for(int i=0; i<N; i++){ if(vis[i])continue; a=i,b=i,c=i; adis=0,bdis=0,cdis=LLONG_MAX; chk=false; dis[i]=0; dfs1(i,-1,0); dis[a]=0; dfs1(a,-1,1); dfs2(b,-1); if(a==b)cdis=0; if(cdis>mx)smx=mx,mx=cdis; else if(cdis>smx) smx=cdis; } return mx+smx+L; }
#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...