#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define maxn 200005
#define f first
#define s second
#define ll long long
#define pb(x) push_back(x)
vector<pair<int, int>> g[maxn];
int p[1000000+1], mx=1e6, o[maxn], k;
bool ch[maxn];
void ex(int u, int r, int sm, int sh){
int sum=sm;if(sm>k)return;
if(p[k-sm]<3e5){
mx=min(mx, sh+p[k-sm]);
}
for(auto i:g[u]){
if(i.f!=r&&!ch[i.f]){
ex(i.f, u, sum+i.s, sh+1);
}
}
p[sm]=min(p[sm], sh);
}
int req(int n, int u, int v){
int sum=1;
for(auto i:g[u]){
if(i.f!=v&&!ch[i.f]){
req(n, i.f, u);
if(o[i.f]==-1){
o[u]=-1;
return -1;
}
sum+=o[i.f];
}
}
if(sum>=n/2){
ch[u]=1;
vector<pair<int, int>> j;
for(auto i:g[u]){
if(!ch[i.f]){
ex(i.f, u, i.s, 1);
j.push_back({i.f, o[i.f]});
}
}
for(auto i:j){
if(i.s>1){
for(int i=1; i<=k; i++){
p[i]=3e5;
}
req(i.s, i.f, i.f);
}
}
o[u]=-1;
return -1;
}
o[u]=sum;
return sum;
}
int best_path(int n, int k1, int h[][2], int l[]){
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]});
}
k=k1;
req(n, 0, 0);
return (mx==1e6?-1:mx);
}
# | 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... |