Submission #578651

#TimeUsernameProblemLanguageResultExecution timeMemory
5786511neDreaming (IOI13_dreaming)C++14
100 / 100
135 ms20088 KiB
#include "dreaming.h" #include<bits/stdc++.h> using namespace std; int travelTime(int N, int M, int L, int A[], int B[], int T[]) { int ans = 0; vector<vector<pair<int,int>>>adj(N); for (int i = 0;i<M;++i){ adj[A[i]].push_back({B[i],T[i]}); adj[B[i]].push_back({A[i],T[i]}); } vector<pair<int,int>>node; vector<bool>visited(N,false); vector<int>pos; vector<pair<int,int>>parent(N,{-1,-1}); for (int i = 0;i<N;++i){ if (!visited[i]){ int cur = i; int maxxy = 0; function<void(int,int,int)> dfs = [&](int u,int par,int score){ visited[u] = true; if (score > maxxy){ maxxy = score; cur = u; } for (auto x:adj[u]){ if (x.first == par)continue; dfs(x.first,u,score + x.second); } }; dfs(i,-1,0); int cur2 = cur,maxxy2 = 0; function<void(int,int)> dfs2 = [&](int u,int score){ visited[u] = true; if (score > maxxy2){ maxxy2 = score; cur2 = u; } for (auto x:adj[u]){ if (x.first == parent[u].first)continue; parent[x.first] = {u,x.second}; dfs2(x.first,score + x.second); } }; dfs2(cur,0); ans = max(maxxy2,ans); node.push_back({maxxy2,cur2}); } } for (auto x:node){ int maxxy2 = x.first; int cur2 = x.second; int maxxy = maxxy2; int minny = maxxy; while(parent[cur2].first!=-1){ maxxy-=parent[cur2].second; cur2 = parent[cur2].first; minny = min(minny,max(maxxy,maxxy2 - maxxy)); } pos.push_back(minny); } sort(pos.begin(),pos.end()); if (pos.size() > 1){ ans = max(ans,pos[pos.size() - 1] + pos[pos.size() - 2] + L); } if (pos.size() > 2){ ans = max(ans,pos[pos.size() - 2] + pos[pos.size()-3] + L + L); } if (pos.size() == 1)ans = max(ans,pos[0]); 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...