Submission #1141364

#TimeUsernameProblemLanguageResultExecution timeMemory
1141364AriadnaRace (IOI11_race)C++20
0 / 100
1 ms324 KiB
#include <bits/stdc++.h> #include "race.h" #define pb push_back #define fi first #define se second using namespace std; vector<int> dist, depth; vector<vector<pair<int, int>>> adj; vector<map<int, int>> aristas; void init(int u, int p) { depth[u] = depth[p]+1; for (pair<int, int> v: adj[u]) { if (v.fi != p) { dist[v.fi] = dist[u]+v.se; init(v.fi, u); } } aristas[u][dist[u]] = depth[u]; } void dfs(int u, int p, int k, int& ans) { for (pair<int, int> a: adj[u]) { int v = a.fi; if (v != p) { dfs(v, u, k, ans); if (aristas[v].size() > aristas[u].size()) swap(aristas[v], aristas[u]); for (auto i: aristas[v]) { if (aristas[u].find(k+2*dist[u]-i.fi) != aristas[u].end()) { ans = min(ans, i.se+aristas[u][k+2*dist[u]-i.fi]-2*depth[u]); } } for (auto i: aristas[v]) { if (aristas[u].find(i.fi) != aristas[u].end()) { aristas[u][i.fi] = min(aristas[u][i.fi], i.se); } else { aristas[u][i.fi] = i.se; } } } } } int best_path(int N, int K, int H[][2], int L[]) { adj = vector<vector<pair<int, int>>>(N); dist = depth = vector<int>(N); aristas = vector<map<int, int>>(N); for (int i = 0; i < N-1; ++i) { adj[H[i][0]].pb({H[i][1], L[i]}); adj[H[i][1]].pb({H[i][0], L[i]}); } dist[0] = 0; depth[0] = -1; init(0, 0); int ans = 1e9; dfs(0, 0, K, ans); 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...