Submission #679316

#TimeUsernameProblemLanguageResultExecution timeMemory
679316kussssoDreaming (IOI13_dreaming)C++17
100 / 100
86 ms16180 KiB
#include<bits/stdc++.h> #include "dreaming.h" using namespace std; using ll = long long; const int N = 1e5 + 5; #define fi first #define se second vector<int> Tree; int d[N]; bool used[N]; int pa[N]; vector<pair<int, int>> g[N]; void dfs (int u, int p) { Tree.push_back(u); used[u] = 1; pa[u] = p; for (auto& e : g[u]) { int v = e.fi; int w = e.se; if (v != p) { d[v] = d[u] + w; dfs(v, u); } } } // int travelTime (int n, int m, int L, vector<int> A, vector<int> B, vector<int> T) { int travelTime (int n, int m, int L, int A[], int B[], int T[]) { 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]}); } int longest = 0; vector<int> R; for (int i = 0; i < n; i++) { if (!used[i]) { dfs(i, -1); int v = i; for (auto& j : Tree) if (d[j] > d[v]) v = j; Tree.clear(); d[v] = 0; dfs(v, -1); for (auto &j : Tree) if (d[j] > d[v]) v = j; int u = v; int x = v; while (u != -1) { if (abs(2 * d[u] - d[v]) < abs(2 * d[x] - d[v])) { x = u; } u = pa[u]; } longest = max(longest, d[v]); R.push_back(max(d[x], d[v] - d[x])); Tree.clear(); } } sort(R.rbegin(), R.rend()); if (R.size() > 1) { longest = max(longest, R[0] + R[1] + L); if (R.size() > 2) { longest = max(longest, R[1] + R[2] + L * 2); } } return longest; } // signed main() { // ios_base::sync_with_stdio(0); // cin.tie(0); // // int n, m, L; // cin >> n >> m >> L; // vector<int> A(m), B(m), T(m); // for (int i = 0; i < m; i++) cin >> A[i] >> B[i] >> T[i]; // // cout << travelTime(n,m,L,A,B,T); // // return 0; // }
#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...