Submission #1318298

#TimeUsernameProblemLanguageResultExecution timeMemory
1318298Ekber_EkberDreaming (IOI13_dreaming)C++20
100 / 100
232 ms18180 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define ff first #define ss second #define pb push_back #define all(v) v.begin(), v.end() using namespace std; constexpr int MAX = 2e+5 + 1, INF = 2e+9, MOD = 1e+9 + 7, K = 31; vector <pair<int, int>> g[MAX+2]; vector <int> dis(MAX+2), col(MAX+2, 0), p(MAX+2, 0); vector <int> tp; int w, ans; void dfs(int u, int c=-1) { col[u] = 1; tp.pb(u); for (auto &i : g[u]) { if (i.ff == c) continue; dis[i.ff] = dis[u] + i.ss; p[i.ff] = u; dfs(i.ff, u); w += i.ss; } } int get(int u) { tp.clear(); dis[u] = 0; dfs(u); int c = u; for (int &i : tp) { if (dis[c] < dis[i]) c = i; } tp.clear(); dis[c] = 0; p[c] = -1; dfs(c); int c1 = c; for (int &i : tp) { if (dis[c1] < dis[i]) c1 = i; } vector <int> a; int c11 = c1; while (c1 != -1) { a.pb(c1); c1 = p[c1]; } c1 = c11; int d = dis[c1], res = c; for (int &i : a) { int xr = max(dis[res], d - dis[res]); int xi = max(dis[i], d - dis[i]); if (xi < xr) res = i; } ans = max(ans, dis[c1]); return max(dis[res], d - dis[res]); } int travelTime(int n, int m, int L, int A[], int B[], int T[]) { for (int i = 0; i < m; i++) { g[A[i] + 1].pb({B[i]+1, T[i]}); g[B[i] + 1].pb({A[i]+1, T[i]}); } vector <int> a; for (int i = 1; i <= n; i++) { if (col[i]) continue; a.pb(get(i)); } sort(all(a),greater<int>()); for (int &i : a) cerr << i << ' '; if (a.size() == 1) ans = max(ans, a[0]); else if (a.size() == 2) ans = max(ans, a[0] + a[1] + L); else ans = max({ans, a[0] + a[1] + L, a[1] + a[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...