Submission #379294

#TimeUsernameProblemLanguageResultExecution timeMemory
379294justiny7Race (IOI11_race)C++17
0 / 100
4 ms5100 KiB
#include "race.h" #include <bits/stdc++.h> using namespace std; const int mxN=2e5+1, mxK=1e6+1, INF=1e9; int ans=INF, sz[mxN], mn[mxN]; vector<pair<int, int>> adj[mxN]; bool vis[mxN]; int dfs_sz(int v, int p=-1) { sz[v]=1; for (auto [u, d]:adj[v]) if (!vis[u] && u^p) sz[v]+=dfs_sz(u, v); return sz[v]; } int dfs_centroid(int tot, int v, int p=-1) { for (auto [u, d]:adj[v]) if (!vis[u] && u^p && sz[u]*2>tot) return dfs_centroid(tot, u, v); return v; } void dfs(int k, int v, int p=-1, int dep=0, int len=0) { mn[len]=min(mn[len], dep); for (auto [u, d]:adj[v]) if (!vis[u] && u^p && len+d<=k) dfs(k, u, v, dep+1, len+d); } void decomp(int k, int x=0) { int v=dfs_centroid(dfs_sz(x), x); vis[v]=1; fill(mn+1, mn+k+1, INF); dfs(k, v); for (int i=0; i<=k/2; ++i) ans=min(ans, mn[i]+mn[k-i]); for (auto [u, d]:adj[v]) if (!vis[u]) decomp(k, u); } int best_path(int N, int K, int H[][2], int L[]) { for (int i=0; i<N; ++i) adj[i].clear(); for (int i=0; i<N-1; ++i) { adj[H[i][0]].emplace_back(H[i][1], L[i]); adj[H[i][1]].emplace_back(H[i][0], L[i]); } decomp(K); return (ans==INF?-1: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...