Submission #411587

#TimeUsernameProblemLanguageResultExecution timeMemory
411587albertolg101Dreaming (IOI13_dreaming)C++17
100 / 100
101 ms20940 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; const int INF = 2e9; using pii = pair<int, int>; void Max (pair<pii, pii> &b, pii a) { if(b.first < a) { b.second = b.first; b.first = a; } else if(b.second < a) { b.second = a; } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { int n = N; vector<vector<pii>> g(n); 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<pair<pii, pii>> mm(n); vector<bool> flag(n); function<int(int, int)> dfs1 = [&](int nod, int father) { flag[nod] = true; for(auto i: g[nod]) { if(i.first != father) { Max(mm[nod], {dfs1(i.first, nod) + i.second, i.first}); } } return mm[nod].first.first ; }; for(int i = 0 ; i < n ; i++) { if(!flag[i]) { dfs1(i, -1); } } //for(auto i: mm) // cout << i.first.first << ' ' << i.first.second << ' ' << i.second.first << ' ' << i.second.second << endl ; function<int(int, int, int)> dfs2 = [&](int nod, int father, int path) { flag[nod] = true; int ans = max(mm[nod].first.first, path); for(auto i: g[nod]) { if(i.first != father) { int tempPath = path; if(i.first == mm[nod].first.second) tempPath = max(tempPath, mm[nod].second.first); else tempPath = max(tempPath, mm[nod].first.first); ans = min(ans, dfs2(i.first, nod, tempPath + i.second)); } } return ans; }; flag = vector<bool> (n, false); vector<int> vans; for(int i = 0 ; i < n ; i++) { if(!flag[i]) vans.push_back(dfs2(i, -1, 0)); } //for(auto i: vans) // cout << i << ' ' ; //cout << endl ; int ans = 0; for(auto i: mm) ans = max(ans, i.first.first + i.second.first); if(vans.size() <= 1) return ans; else { sort(vans.rbegin(), vans.rend()); ans = max(ans, vans[0] + vans[1] + L); if(vans.size() >= 3) ans = max(ans, vans[1] + vans[2] + 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...