daa
2025-09-30 17:17:23
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
const int N=305;
int maxi,last[N],dis[N],n,s,ans=2e9,ll,rr;
bool on[N];
vector<pair<int,int>>t[N];
void dfs(int no,int la){
last[no]=la;
if(dis[no]>dis[maxi])maxi=no;
for(auto i:t[no]){
if(i.first!=la&&!on[i.first]){
dis[i.first]=dis[no]+i.second;
dfs(i.first,no);
}
}
}
int main(){
iossync_with_stdio(0);
cin.tie(0);stdcout.tie(0);
cin>>n>>s;
for(int i=1;i<n;++i){
int u,v,w;
cin>>u>>v>>w;
t[u].push_back(make_pair(v,w));
t[v].push_back(make_pair(u,w));
}
dfs(1,0);
ll=maxi;
dis[ll]=0;
dfs(ll,0);
rr=maxi;
for(int l=rr,r=rr;l;l=last[l]){
while(dis[r]-dis[l]>s)r=last[r];
ans=min(ans,max(dis[rr]-dis[r],dis[l]));
}
for(int i=rr;i;i=last[i])on[i]=1;
for(int i=rr;i;i=last[i])dis[i]=0,dfs(i,last[i]);
for(int i=1;i<=n;++i)ans=std::max(ans,dis[i]);
cout<<ans;
return 0;
}
这里空空如也







有帮助,赞一个