# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1161462 | JahonaliX | Race (IOI11_race) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
int best_path(int n, int k, int h[][2], int l[]) {
int z = n;
vector<vector<pair<int, int>>> a(n);
for (int i = 0; i + 1 < n; ++i) a[h[i][0]].emplace_back(h[i][1], l[i]), a[h[i][1]].emplace_back(h[i][0], l[i]);
auto dfs = [&] (auto dfs, int i, int p, int w) -> vector<int> {
vector<int> dp(k + 1, -1);
dp[0] = 0;
for (auto [j, wtf] : a[i]) {
if (p != j) {
auto x = dfs(dfs, j, i, wtf);
for (int y = 0; y <= k; ++y) if (~dp[k - y] && ~x[y]) z = min(z, dp[k - y] + x[y]);
for (int y = 0; y <= k; ++y) {
if (~x[y]) {
if (~dp[y]) dp[y] = min(dp[y], x[y]);
else dp[y] = x[y];
}
}
}
}
for (int y = k - w; y >= 0; --y) dp[y + wtf] = dp[y];
if (~dp[k]) z = min(z, dp[k]);
return dp;
};
dfs(dfs, 0, 0, 0);
return z;
}