Submission #553910

#TimeUsernameProblemLanguageResultExecution timeMemory
553910elazarkorenDreaming (IOI13_dreaming)C++17
100 / 100
89 ms19464 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define x first #define y second #define all(v) v.begin(), v.end() #define chkmin(a, b) a = min(a, b) #define chkmax(a, b) a = max(a, b) using namespace std; typedef long long ll; typedef vector<ll> vi; typedef vector<vi> vvi; typedef pair<int, int> pii; typedef vector<pii> vii; const int MAX_N = 1e5 + 5; vii tree[MAX_N]; int deg[MAX_N]; bitset<MAX_N> visited; pii DfsFar(int node, int parent, int d) { visited[node] = true; pii p = {d, node}; for (auto [neighbor, w] : tree[node]) { if (neighbor != parent) { chkmax(p, DfsFar(neighbor, node, d + w)); } } return p; } bool DfsPath(int node, int parent, int end, vii &path) { if (node == end) { path.push_back({node, 0}); return true; } for (auto [neighbor, w] : tree[node]) { if (neighbor != parent && DfsPath(neighbor, node, end, path)) { path.push_back({node, w}); return true; } } return false; } int ans = 0; pii FindRadius(int node) { int v = DfsFar(node, -1, 0).y; auto [diameter, u] = DfsFar(v, -1, 0); pii x = {diameter, v}; int dist = 0; vii path; DfsPath(v, -1, u, path); reverse(all(path)); for (auto [node, w] : path) { pii q = {max(dist, diameter - dist), node}; chkmin(x, q); dist += w; } chkmax(ans, diameter); return x; } int travelTime(int n, int m, int l, int a[], int b[], int t[]) { for (int i = 0; i < m; i++) { deg[a[i]]++, deg[b[i]]++; } for (int i = 0; i < n; i++) { tree[i].reserve(deg[i]); } for (int i = 0; i < m; i++) { tree[a[i]].push_back({b[i], t[i]}); tree[b[i]].push_back({a[i], t[i]}); } vii radius; for (int i = 0; i < n; i++) { if (!visited[i]) { radius.push_back(FindRadius(i)); } } sort(all(radius)); int v = radius.back().y; radius.pop_back(); for (auto [r, node] : radius) { tree[v].push_back({node, l}); tree[node].push_back({v, l}); } return DfsFar(DfsFar(0, -1, 0).y, -1, 0).x; }
#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...