#ifdef __AVX2__
#pragma GCC target "avx2"
#endif
#pragma GCC optimize "O3"
#pragma GCC optimize "unroll-loops"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
// #define int long long
#define elif else if
#define all(l) begin(l),end(l)
#define rall(l) rbegin(l),rend(l)
#define append push_back
#define print(l) for(auto i:l) cout<<i<<' '; cout<<endl;
#define pprint(a,b) cout<<a<<' '<<b<<endl;
#define inp(l) for(auto &i:l) cin>>i;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define pai make_pair
#define endl "\n"
#define pii pair<int,int>
#define fi first
#define se second
#define vec vector
// const int mod=998244353;
const int mod1=998244353;
const int mod=1e9+7;
const int N=2e5+5;
set<pii>s[N];
vec<pii>G[N];
int dis[N],dep[N];
int n,k;
int dfs(int u,int p){
int ans=1e9;
s[u].insert({dis[u],dep[u]});
int ind=-1,ma=-1;
for(auto [v,w]:G[u]){
if(v==p) continue;
dis[v]=dis[u]+w;
dep[v]=dep[u]+1;
ans=min(ans,dfs(v,u));
if((int)s[v].size()>ma){
ind=v;
ma=s[v].size();
}
}
if(ma<0){
// cout<<u<<endl;
return ans;
}
swap(s[u],s[ind]);
for(auto [v,w]:G[u]){
if(v==p) continue;
for(auto [x,y]:s[v]){
if(x>dis[u]+k) continue;
int g=(k-(x-dis[u]))+dis[u];
pii idk={g,-1};
pii temp=*lower_bound(all(s[u]),idk);
if(temp.fi==g) ans=min(ans,(y+temp.se)-dep[u]*2);
}
// if(u==1) cout<<"11 "<<v<<endl;
for(auto [x,y]:s[v])
s[u].insert({x,y});
}
return ans;
}
int best_path(int N, int K, int H[][2], int L[]){
n=N;
k=K;
for(int i=0;i<n-1;i++){
int u=H[i][0],v=H[i][1],w=L[i];
G[u].append({v,w});
G[v].append({u,w});
}
int ans=dfs(0,-1);
if(ans>n) return -1;
return ans;
// 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... |