#include<bits/stdc++.h>
#include "race.h"
#define endl '\n'
using namespace std;
const long long maxn=2e5+10;
struct c
{
long long x,t;
};
vector<c> v[maxn];
long long n,k;
long long d[maxn],r[maxn];
map<long long,long long> m[maxn];
int ans=1e9;
void dfs1(long long i,long long par)
{
r[i]=r[par]+1;
for(auto nb:v[i])
{
if(nb.x==par)
{
continue;
}
d[nb.x]=d[i]+nb.t;
dfs1(nb.x,i);
}
}
void unite(long long x,long long y)
{
cout<<x<<' '<<y<<endl;
if(m[x].size()<m[y].size())
{
swap(m[x],m[y]);
}
for(auto [key,value]:m[y])
{
if(m[x][key]==0)
{
m[x][key]=value;
}
else
{
m[x][key]=min(m[x][key],value);
}
//cout<<key<<' '<<value<<' '<<m[x][key]<<' '<<d[x]<<endl;
if(m[x].count(k - key + 2*d[x]))
{
ans = min(ans*1LL, m[x][k - key + 2*d[x]] + value - 2*r[x]);
}
}
}
//k=d[u]+d[v]-2*d[lca(x,y)]
void dfs(long long i,long long par)
{
for(auto nb:v[i])
{
if(nb.x==par)
{
continue;
}
//cout<<i<<' '<<nb.x<<' '<<"||"<<endl;
dfs(nb.x,i);
unite(i,nb.x);
}
}
int best_path(int N,int K,int h[][2],int l[])
{
n=N;
k=K;
for(long long i=0; i<n-1; i++)
{
//cout<<h[i][0]<<' '<<h[i][1]<<' '<<l[i]<<endl;
v[h[i][0]].push_back({h[i][1],l[i]});
v[h[i][1]].push_back({h[i][0],l[i]});
}
r[0]=-1;
dfs1(0,0);
for(long long i=0; i<n; i++)
{
//cout<<d[i]<<' '<<r[i]<<endl;
m[i][d[i]]=r[i];
}
dfs(0,-1);
if(ans==1e9)
{
return -1;
}
return ans;
}
/*
11 12
0 1 3
0 2 4
2 3 5
3 4 4
4 5 6
0 6 3
6 7 2
6 8 5
8 9 6
8 10 7
*/
| # | 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... |