Submission #1126081

#TimeUsernameProblemLanguageResultExecution timeMemory
1126081m_bezrutchkaDreaming (IOI13_dreaming)C++20
47 / 100
61 ms15304 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; const int MAXN = 1e5 + 10; vector<pii> adj[MAXN]; int n, distante; int dist[MAXN]; pii pai[MAXN]; vector<vector<pii>> chains; bool mrk_1[MAXN], mrk_2[MAXN]; vector<int> st; int diam; void dfs(int v) { // cout << "dfs " << v << endl; mrk_2[v] = true; mrk_1[v] = true; if (dist[distante] < dist[v]) { distante = v; } for (auto [w, nc]: adj[v]) { if (pai[v].first == w) continue; pai[w] = {v, nc}; dist[w] = dist[v] + nc; dfs(w); } } int compute_radius() { int v = distante; vector<int> all_c; int tot = 0; while (v != -1) { // cout << "processed node " << v << endl; tot += pai[v].second; all_c.push_back(pai[v].second); v = pai[v].first; } int l = 0, r = tot; int resp = tot; for (int x: all_c) { // cout << "looking at x " << x << endl; l += x; r -= x; // cout << "l = " << l << " " << "r = " << r << endl; resp = min(resp, max(l, r)); } // cout << "resp is " << resp << endl; return resp; } int find_radius(int v) { // cout << "find_radius " << v << endl; for (int i = 0; i < n; i++) { mrk_1[i] = false; dist[i] = 0; pai[i] = {-1, 0}; } distante = v; dfs(v); // cout << "distante do v == " << distante << endl; for (int i = 0; i < n; i++) { mrk_1[i] = false; dist[i] = 0; pai[i] = {-1, 0}; } dfs(distante); diam = max(diam, dist[distante]); // cout << "distante do distante == " << distante << endl; return compute_radius(); } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { // subtask 3 assert(M == N - 2); n = N; for (int i = 0; i < M; i++) { adj[A[i]].push_back({B[i], T[i]}); adj[B[i]].push_back({A[i], T[i]}); } int r1 = find_radius(0); int root = 0; while (mrk_2[root]) root++; int r2 = find_radius(root); return max(diam, r1 + r2 + L); }
#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...