#include "race.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define pb push_back
#define ll long long
#define inf 1e18
const int lim=2e5;
vector<pii>g[lim+10];
ll dis[lim+10];
vector<int>l(lim+10);
ll ans=inf,n,k;
// somehow semakin besar knya bakalan salah
map<ll,ll> dfs(int u,int par,int dep){
map<ll,ll>cur;
cur[dis[u]]=dep;
for(auto [v,w]:g[u]){
if(v==par) continue;
dis[v]=dis[u]+w;
map<ll,ll> anak=dfs(v,u,dep+1);
if(anak.size()>cur.size()){
swap(cur,anak);
}
// cout<<u<<' '<<v<<endl;
for(auto [x,y]:anak){
ll tar=k-x+2*dis[u];
// if(tar<0) continue;
if(cur.count(tar)){
ans=min(ans,cur[tar]+y-2*dep);
}
if(cur.count(x)) cur[x]=min(cur[x],y);
else cur[x]=y;
}
for(auto [x,y]:anak){
if(cur.count(x)) cur[x]=min(cur[x],y);
else cur[x]=y;
}
}
return cur;
}
int best_path(int N, int K, int H[][2], int L[])
{
ans=inf;
n=N,k=K;
for(int i=0;i<n-1;i++){
g[H[i][0]].pb({H[i][1],L[i]});
g[H[i][1]].pb({H[i][0],L[i]});
}
dfs(0,-1,0);
for(int i=0;i<n-1;i++){
g[H[i][0]].clear();
g[H[i][1]].clear();
}
if(ans==inf) return -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... |