Submission #880583

#TimeUsernameProblemLanguageResultExecution timeMemory
880583Mr_HusanboyDreaming (IOI13_dreaming)C++17
0 / 100
33 ms11356 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; using ll = long long; const ll infl = 1e18; template<typename T> int len(T &a){ return a.size(); } int travelTime(int n, int m, int L, int a[], int b[], int t[]) { vector<vector<pair<int,int>>> g(n); for(int i = 0; i < m; i ++){ g[a[i]].emplace_back(b[i], t[i]); g[b[i]].emplace_back(a[i], t[i]); } vector<ll> disa(n); vector<bool> vis(n); int mx = 0; auto dfs = [&](auto &dfs, int i, int p = -1)->void{ vis[i] = 1; for(auto [u, w] : g[i]){ if(u == p) continue; disa[u] = disa[i] + w; dfs(dfs, u, i); } if(disa[mx] < disa[i]) mx = i; }; ll mxx = infl; auto dfs2 = [&](auto &dfs2, int i, int p = -1, ll d = 0)->void{ vis[i] = 1; mxx = min(mxx, max(d, disa[i])); for(auto [u, w] : g[i]){ if(u == p) continue; dfs2(dfs2, u, i, d + w); } }; ll ans = infl; vector<ll> dis; for(int i = 0; i < n; i ++){ if(vis[i]) continue; mx = i; mxx = infl; dfs(dfs, i); disa[mx] = 0; dfs(dfs, mx); dfs2(dfs2, mx); dis.push_back(mxx); } if(len(dis) == 1){ return dis[0]; } if(len(dis) == 2){ return dis[0] + dis[2] + L; } sort(dis.begin(), dis.end()); n = dis.size(); ans = max({dis[n - 1] + dis[n - 2] + L, dis[n - 1] + dis[n - 3] + 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...