#include<bits/stdc++.h>
using namespace std;
#define edge(i,x) for(int i=h[x]; i; i=nt[i])
#define For(i,x,y) for(int i=x; i<=y; i++)
const int N=1e3;
int n,s,h[N],nt[N*2],to[N*2],w[N*2],cnt;
void add(int x,int y,int z)
{
    nt[++cnt]=h[x]; h[x]=cnt; to[cnt]=y; w[cnt]=z;
}
int p[N],nxt[N];
int d[N],st,maxn,ed;
void dfs1(int x,int fa)
{
    edge(i,x)
    {
        int y=to[i];
        if(y==fa)continue;
        //cout<<x<<" "<<y<<" ";
        d[y]=d[x]+w[i];
       // cout<<d[y]<<endl;
        if(d[y]>maxn)
        {
            maxn=d[y],st=y;
        }
        dfs1(y,x);
    }
}
int w1[N],w2[N];
void dfs2(int x,int fa)
{
    edge(i,x)
    {
        int y=to[i];
        if(y==fa)continue;
        d[y]=d[x]+w[i];
        if(d[y]>maxn)
        {
            maxn=d[y],ed=y;
        }
        p[y]=x;
        dfs2(y,x);
    }
}
void dfs3(int x,int fa)
{
    d[x]=0;
    edge(i,x)
    {
        int y=to[i];
        if(y==fa||y==nxt[x]||y==p[x])continue;
        dfs3(y,x);
        d[x]=max(d[x],d[y]+w[i]);
    }
}
int ans;
int main()
{
    //freopen("text.in","r",stdin);
    cin>>n>>s;
    For(i,1,n-1){
        int A,B,C;
        cin>>A>>B>>C;
        add(A,B,C);
        add(B,A,C);
    }
    st=0,maxn=-1;
    dfs1(1,0);
    //cout<<maxn<<endl;
    maxn=-1;
    memset(d,0,sizeof(d));
    dfs2(st,0);
    //cout<<st<<" "<<ed<<endl;
    int j=ed;
    //for(int i=ed; i; i=p[i])
    //{
    //    cout<<i<<" ";
    //}
    //cout<<endl;
    for(int i=ed; i; i=p[i])
        nxt[p[i]]=i;
    ans=(1<<30);
    //for(int i=ed; i; i=p[i])cout<<d[i]<<" ";
    //cout<<endl;
    for(int i=ed; i; i=p[i])
    {
        while(p[j]&&d[i]-d[p[j]]<=s)j=p[j];
        ans=min(ans,max(d[ed]-d[i],d[j]));
    }
    //cout<<ans<<endl;
    for(int i=ed; i; i=p[i])
        dfs3(i,0),ans=max(ans,d[i]);//,printf("%d ",d[i]);
    //cout<<endl;
    cout<<ans<<endl;
}

原文地址:http://www.cnblogs.com/dadidididi/p/16800359.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性