#include "race.h"
#include<bits/stdc++.h>
using namespace std;
int n, k;
vector<vector<pair<int, int>>> g;
vector<map<int, int>> d;
vector<int> dist, sum;
int mn = 2e9;
bool have_ans = false;
void dfs(int v, int prev) {
for(auto [u, w]: g[v]) {
if(u == prev) continue;
dist[u] = dist[v]+1;
sum[u] = sum[v]+w;
d[u][sum[u]] = dist[u];
dfs(u, v);
}
}
void mrg(int v, int prev) {
int target = k + 2*sum[v];
for(auto [u, w]: g[v]) {
if(prev == u) continue;
mrg(u, v);
if(d[u].size() > d[v].size()) swap(d[u], d[v]);
for(auto [key, val]: d[u]) {
if(d[v].count(target-key)) {
mn = min(mn, d[v][target-key] + val - 2*dist[v]);
}
}
for(auto [key, val]: d[u]) {
if(d[v].count(key)) d[v][key] = min(d[v][key], val);
else d[v][key] = val;
}
}
}
int best_path(int N, int K, int H[][2], int L[]) {
n = N; k = K;
g.assign(n, vector<pair<int, int>>());
d.assign(n, map<int, int>());
dist.assign(n, 0);
sum.assign(n, 0);
for(int i = 0; i < n-1; i++) {
g[H[i][0]].push_back({H[i][1], L[i]});
g[H[i][1]].push_back({H[i][0], L[i]});
}
d[0][0] = 0;
dfs(0, -1);
mrg(0, -1);
if(mn < 1e9) return mn;
return -1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |