#include<bits/stdc++.h>
using namespace std;
struct point{
int to,w;
};
vector<point> mp[500001];
int dist[500001],fa[500001],flag[500001];
int far=0;
int ans=1e9;
int s;
int A,B;
int n;
int dfs(int u,int f)
{
fa[u]=f;
if(dist[u]>dist[far]) far=u;
for(int i=0;i<mp[u].size();++i)
{
int v=mp[u][i].to,w=mp[u][i].w;
if(v==f||flag[v]) continue;
dist[v]=dist[u]+w;
dfs(v,u);
}
}
int main()
{
cin>>n>>s;
for(int i=1;i<=n-1;i++)
{
int a,b,c;
cin>>a>>b>>c;
mp[a].push_back({b,c});
mp[b].push_back({a,c});
}
dist[1]=1;
dfs(1,0);
A=far;
dist[A]=0;
dfs(far,0);
B=far;
for(int i=B,j=B;i;i=fa[i])
{
while(dist[j]-dist[i]>s) j=fa[j];
int x=max(dist[B]-dist[j],dist[i]);
ans=min(ans,x);
}
for(int i=B;i!=0;i=fa[i]) flag[i]=1;
for(int i=B;i!=0;i=fa[i])
{
dist[i]=0;
dfs(i,fa[i]);
}
for(int i=1;i<=n;i++) ans=max(ans,dist[i]);
cout<<ans;
return 0;
}
0分
100分