Submission #578637

#TimeUsernameProblemLanguageResultExecution timeMemory
5786371ne꿈 (IOI13_dreaming)C++14
47 / 100
1098 ms25628 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<vector<int>>dp(N,vector<int>(2,0)); vector<bool>visited(N,false); vector<int>pos; 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); vector<pair<int,int>>parent(N,{-1,-1}); 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); maxxy = maxxy2; ans = max(maxxy2,ans); while(parent[cur2].first!=-1){ if (maxxy > maxxy2 - maxxy + parent[cur2].second){ maxxy-=parent[cur2].second; cur2 = parent[cur2].first; } else{ break; } } pos.push_back(max(maxxy,maxxy2 - maxxy)); } } sort(pos.begin(),pos.end()); if (pos.size() > 1){ ans = max(ans,pos[pos.size() - 1] + pos[pos.size() - 2] + 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...