rt 其实样例2也没过( 有无巨佬帮忙调一下,本人已崩溃
#include<bits/stdc++.h>
#include<vector>
using namespace std;
typedef long long LL;
const LL N=400;
vector<pair<LL,LL> >v[N],q;
LL n,s,len,vis[N],Ans=1e18,maxs,p;
void dfs1(LL u,LL fa,LL d){
if(d>maxs) maxs=d,p=u;
for(int i=0;i<v[u].size();i++){
if(v[u][i].first==fa) continue;
dfs1(v[u][i].first,u,d+v[u][i].second);
}
}
LL dfs2(LL u,LL fa){
LL maxs=0,ansNum=u,ansW=0;
for(int i=0;i<v[u].size();i++){
if(v[u][i].first==fa) continue;
LL k=dfs2(v[u][i].first,u),w=v[u][i].second;
if(k+w>maxs) maxs=k+w,ansNum=v[u][i].first,ansW=w;
}
if(ansNum!=u) q.push_back({ansNum,ansW});
return maxs;
}
void dfs3(LL l,LL r,LL u,LL fa,LL d){
maxs=max(maxs,d);
for(int i=0;i<v[u].size();i++){
LL k=v[u][i].first;
if(k==fa) continue;
if(l<=vis[k]&&vis[k]<=r) dfs3(l,r,k,u,0);
else dfs3(l,r,k,u,d+v[u][i].second);
}
}
LL ECC(LL x,LL y){
maxs=0;
dfs3(vis[x],vis[y],x,0,0);
return maxs;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>s;
for(int i=1,x,y,w;i<n;i++){
cin>>x>>y>>w;
v[x].push_back({y,w});
v[y].push_back({x,w});
}
dfs1(1,0,0);
dfs2(p,0);
q.push_back({p,0});
for(int i=0;i<q.size();i++) vis[q[i].first]=++len;
for(int i=0;i<q.size();i++){
LL sum=0;
for(int j=i;j<q.size();j++){
if(j>i) sum+=q[j].second;
if(sum>s) break;
Ans=min(Ans,ECC(q[i].first,q[j].first));
}
}
cout<<Ans;
return 0;
}