在12,18RE了,12测试点在找重心的时候就炸了,害,为啥啊,求助
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
#define inf 2147483647
using namespace std;
int judge[30000001];
int ttot=0,cnt=0,head[1000001],ans=2147483647,tot=0,n,k,rt,maxp[1000001],siz[1000001],sum,dis[1000001],q[1000001];
pair<int,int> rem[5000001];
bool vis[1000001];
struct edge{
int v,w,nxt;
}e[1000001];
inline void add(int u,int v,int val){
e[++tot].v=v,e[tot].w=val,e[tot].nxt=head[u],head[u]=tot;
e[++tot].v=u,e[tot].w=val,e[tot].nxt=head[v],head[v]=tot;
}
inline void find_balance(int now,int fa){
siz[now]=1;
maxp[now]=0;
for(int i=head[now];i;i=e[i].nxt){
int to=e[i].v;
if(to==fa||vis[to]) continue;
find_balance(to,now);
siz[now]+=siz[to];
maxp[now]=max(maxp[now],siz[to]);
}
maxp[now]=max(maxp[now],sum-maxp[now]);
if(maxp[now]<maxp[rt]) rt=now;
}
inline void getdis(int now,int fa,int depth){
rem[++cnt].first=dis[now],rem[cnt].second=depth;
q[++q[0]]=dis[now];
for(int i=head[now];i;i=e[i].nxt){
int to=e[i].v;
if(to==fa||vis[to]) continue;
dis[to]=dis[now]+e[i].w;
getdis(to,now,depth+1);
}
}
inline void calc(int now){
q[0]=0;
for(int i=head[now];i;i=e[i].nxt){
int to=e[i].v;
if(vis[to]) continue;
cnt=0;
dis[to]=e[i].w;
getdis(to,now,1);
for(int j=cnt;j;--j){
if(k-rem[j].first>=0&&judge[k-rem[j].first]!=-1)
ans=min(ans,judge[k-rem[j].first]+rem[j].second);
}
for(int j=cnt;j;--j){
if(judge[rem[j].first]==-1){
judge[rem[j].first]=rem[j].second;
}else judge[rem[j].first]=min(judge[rem[j].first],rem[j].second);
}
}
for(int i=1;i<=q[0];i++){
judge[q[i]]=-1;
}
}
inline void solve(int now){
vis[now]=1;judge[0]=0;calc(now);
for(int i=head[now];i;i=e[i].nxt){
int to=e[i].v;
if(vis[to]) continue;
sum=siz[to];maxp[rt=0]=inf;
find_balance(to,0);solve(rt);
}
}
int main(){
//freopen("1.in","r",stdin);
memset(judge,-1,sizeof(judge));
cin>>n>>k;
for(int i=1;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
u++,v++;
add(u,v,w);
}
sum=maxp[rt]=n;
//cout<<n<<endl;
find_balance(1,0);
solve(rt);
if(ans==2147483647){
cout<<"-1";
}else cout<<ans;
return 0;
}