Submission #715576

#TimeUsernameProblemLanguageResultExecution timeMemory
715576BaytoroDreaming (IOI13_dreaming)C++17
18 / 100
61 ms13952 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; #define fr first #define sc second const int N=1e5+5; vector<pair<int,int>> g[N]; int used[N]; int ans; int get(int x, int y, int p, int D, int d){ if(x==y){ ans=min(ans,max(D,d)); return 1; } for(auto it: g[x]){ if(it.fr==p) continue; if(get(it.fr,y,x,D-it.sc,d+it.sc)){ ans=min(ans,max(D,d)); return 1; } } return 0; } int D,f; void dfs(int x, int p, int d){ used[x]=1; if(d>D) f=x,D=d; for(auto it: g[x]){ if(it.fr==p) continue; dfs(it.fr,x,d+it.sc); } } int find(int x){ D=0,f=x; dfs(x,x,0); D=0; int F=f; dfs(f,f,0); ans=1e9; //cout<<x<<' '<<D<<endl; get(f,F,-1,D,0); return ans; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(int i=0;i<M;i++){ g[A[i]].push_back({B[i],T[i]}); g[B[i]].push_back({A[i],T[i]}); } vector<int> vec; for(int i=0;i<N;i++){ if(!used[i]){ int c=find(i); vec.push_back(c); } } /*for(auto it: vec) cout<<it<<' '; cout<<endl;*/ sort(vec.rbegin(),vec.rend()); int ans=vec[0]; if(vec.size()>1) ans=max(ans,vec[0]+vec[1]+L); if(vec.size()>2) ans=max(ans,vec[1]+vec[2]+L+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...