RT
#include<bits/stdc++.h>
#define ri register int
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
inline char gc() {return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
inline int read() {
int x=0,f=1;char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
return x*f;
}
}
using IO::read;
namespace nanfeng{
static const int N=2e5+7;
static const int INF=1e9+7;
struct edge{int v,w,nxt;}e[N<<1];
int first[N],t=1,siz[N],G[N],dis1[N],dis2[N],bc[N*5],pos,cnt,n,k,tot,ans=INT_MAX;
inline void test(int a) {if (a>=5*N) printf("test%d\n",a);}
inline void add(int u,int v,int w) {
e[t].v=v;
e[t].w=w;
e[t].nxt=first[u];
first[u]=t++;
}
inline int dfs_find(int S,int x,int f) {
siz[x]=1;
ri GS=0;
for (ri i(first[x]),v;i;i=e[i].nxt) {
if ((v=e[i].v)==f||G[v]) continue;
dfs_find(S,v,x);
siz[x]+=siz[v];
GS=max(GS,siz[v]);
}
GS=max(GS,S-siz[x]);
if (GS<cnt) {
cnt=GS;
pos=x;
}
}
inline void dfs_dis(int x,int f,int d1,int d2) {
if (d2>k) return;
dis1[p(tot)]=d1;dis2[tot]=d2;
for (ri i(first[x]),v;i;i=e[i].nxt) {
if ((v=e[i].v)==f||G[v]) continue;
dfs_dis(v,x,d1+1,d2+e[i].w);
}
}
inline void calc(int x) {
bc[tot=0]=0;
for (ri i(first[x]),v;i;i=e[i].nxt) {
if (G[v=e[i].v]) continue;
int ps=tot;
dfs_dis(v,x,1,e[i].w);
for (ri j(ps+1);j<=tot;p(j)) ans=min(ans,bc[k-dis2[j]]+dis1[j]),test(k-dis2[j]);
for (ri j(ps+1);j<=tot;p(j)) bc[dis2[j]]=min(bc[dis2[j]],dis1[j]),test(dis2[j]);
}
for (ri i(1);i<=tot;p(i)) bc[dis2[i]]=INF,test(dis2[i]);
}
inline void solve(int S,int x,int f) {
dfs_find(cnt=S,x,f);
G[pos]=1;
calc(pos);
for (ri i(first[pos]),v;i;i=e[i].nxt) {
if (G[v=e[i].v]) continue;
solve(siz[v],v,pos);
}
}
inline int main() {
// freopen("1.in","r",stdin);
n=read(),k=read();
for (ri i(1);i<n;p(i)) {
int u=read()+1,v=read()+1,w=read();
add(u,v,w);add(v,u,w);
}
for (ri i(1);i<=k;p(i)) bc[i]=INF;
solve(n,1,0);
printf("%d\n",ans>=n?-1:ans);
return 0;
}
}
int main() {return nanfeng::main();}
目前测出来是 dfs_find
找重心的问题,但没看出来到底哪错了,请万能的谷民帮忙看一看