| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1302800 | BehruzbekX | 경주 (Race) (IOI11_race) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
int best_path (int n, int k, int h[][2], int l[]) {
vector<vector<pair<int, int>>> a(n);
for (int i = 0; i < n - 1; i++) {
a[h[i][0]].emplace_back(h[i][1], l[i]);
a[h[i][1]].emplace_back(h[i][0], l[i]);
}
int ans = INT_MAX;
vector<map<int, int>> mn(n);
vector<int> dist(n), sum(n);
auto dfs = [&] (auto &dfs, int v, int p) -> void{
mn[v][sum[v]] = dist[v];
for (auto [u, w] : a[v]) {
if (u != p) {
sum[u] = sum[v] + w;
dist[u] = dist[v] + 1;
dfs(dfs, u, v);
}
}
for (auto [u, w] : a[v]) {
int g = k + 2 * sum[u];
if (u != p) {
dfs(dfs, u, v);
if (mn[v].size() < mn[u].size()) {
swap(mn[v], mn[u]);
}
for (auto [x, y] : mn[u]) {
if (mn[v].count(g - x)) {
ans = min(ans, y + mn[v][g - x] - 2 * dist[v]);
}
}
for (auto [x, y] : mn[u]) {
if (mn[v].count(x)) {
mn[v][x] = min(mn[v][x], y);
}
else mn[v][x] = y;
}
}
}
};
dfs(dfs, 0, -1);
return (ans == INT_MAX ? -1 : ans);
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
// cin >> t;
while (t--) {
}
return 0;
}
