#include <bits/stdc++.h>
#include "race.h"
// #include "grader.cpp"
using namespace std;
typedef long long ll;
const ll N = 2e5 + 10;
ll n, k, val[N], h[N], ans;
vector<pair<ll, ll>> g[N];
map<ll, ll> mp[N];
void dfs(ll v, ll p = -1){
// cout << v << " " << p << endl;
ll mxc = -1;
for (auto [w, u] : g[v]){
if (u == p) continue;
val[u] = val[v] + w;
h[u] = h[v] + 1;
dfs(u, v);
if (mxc == -1 or mp[mxc].size() < mp[u].size())
mxc = u;
}
if (mxc != -1)
swap(mp[mxc], mp[v]);
if (mp[v].find(k + val[v]) != mp[v].end())
ans = min(ans, mp[v][k + val[v]] - h[v]);
mp[v][val[v]] = h[v];
for (auto [w, u] : g[v]){
if (u == p or u == mxc) continue;
for (auto [sm, hei] : mp[u]){
if (mp[v].find(k - sm + 2 * val[v]) != mp[v].end())
ans = min(ans, mp[v][k - sm + 2 * val[v]] + hei - 2 * h[v] + 1);
if (mp[v].find(sm) != mp[v].end())
mp[v][sm] = min(mp[v][sm], hei);
else mp[v][sm] = hei;
}
}
}
int best_path(int nn, int kk, int H[][2], int L[]){
n = nn, k = kk;
for (int i = 0; i < n - 1; i ++){
int u = H[i][0], v = H[i][1], w = L[i];
g[u].push_back({w, v});
g[v].push_back({w, u});
}
ans = n + 1;
dfs(0);
if (ans == n + 1) ans = -1;
return ans;
}
# | 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... |