Submission #759234

#TimeUsernameProblemLanguageResultExecution timeMemory
759234raysh07Race (IOI11_race)C++17
100 / 100
695 ms42572 KiB
#include "race.h" #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 69; int n, k; vector <pair<int, int>> adj[maxn]; bool del[maxn]; int sz[maxn]; map <int, int> mp; vector <int> comp; int ans = 1e9; vector <pair<int, int>> vec; void dfs(int u, int par, int dist, int dep = 1){ if (dist > k) return; vec.push_back(make_pair(dist, dep)); if (mp.find(k - dist) != mp.end()){ ans = min(ans, mp[k - dist] + dep); } for (auto [v, w] : adj[u]){ if (!del[v] && v != par){ dfs(v, u, dist + w, dep + 1); } } } void dfs2(int u, int par){ sz[u] = 1; comp.push_back(u); for (auto [v, w] : adj[u]){ if (!del[v] && v != par){ dfs2(v, u); sz[u] += sz[v]; } } } int find(int x){ comp.clear(); dfs2(x, -1); for (auto u : comp){ int mx = 0; for (auto [v, w] : adj[u]){ if (!del[v] && sz[v] < sz[u]) mx = max(mx, sz[v]); } mx = max(mx, (int)comp.size() - 1 - sz[u]); // cout << u << " " << mx << "\n"; if (2 * mx <= (int)comp.size()) return u; } // for (auto x : comp){ // cout << x << " " << sz[x] << "\n"; // } // exit(0); assert(false); } void cd(int x){ x = find(x); mp.clear(); mp[0] = 0; int u = x; for (auto [v, w] : adj[u]){ if (!del[v]){ dfs(v, u, w); for (auto [x, y] : vec){ if (mp.find(x) == mp.end()) mp[x] = y; else mp[x] = min(mp[x], y); } vec.clear(); } } del[x] = true; for (auto [v, w] : adj[x]){ if (!del[v]){ cd(v); } } } int best_path(int N, int K, int H[][2], int L[]) { n = N; k = K; for (int i = 0; i < n - 1; i++){ int u = H[i][0]; int v = H[i][1]; int w = L[i]; adj[u].push_back(make_pair(v, w)); adj[v].push_back(make_pair(u, w)); } cd(0); if (ans == 1e9) return -1; else return ans; } // int main(){ // int n, k; cin >> n >> k; // int H[n - 1][2], L[n - 1]; // for (int i = 0; i < n - 1; i++){ // cin >> H[i][0] >> H[i][1]; // } // for (int i = 0; i < n - 1; i++) cin >> L[i]; // cout << best_path(n, k, H, L); // 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...