关闭

tjut 3534

45人阅读 评论(0) 收藏 举报
分类:
#include<stdio.h>  
#include<string.h>  
const int N=500000;  
const int inf=0x3fffffff;  
int head[N],num,Len[N],ans,node[N],k;  
struct edge  
{  
    int ed,w,next;  
}e[N*2];  
void addedge(int x,int y,int w)  
{  
    e[num].ed=y;e[num].w=w;e[num].next=head[x];head[x]=num++;  
    e[num].ed=x;e[num].w=w;e[num].next=head[y];head[y]=num++;  
}  
void dfs(int u,int fa)  
{  
    int i,v,temp;  
    Len[u]=0;//最长边  
    node[u]=1;//最长边的个数  
    for(i=head[u];i!=-1;i=e[i].next)  
    {  
        v=e[i].ed;  
        if(v==fa)continue;  
        dfs(v,u);  
        temp=Len[v]+e[i].w;  
        if(temp+Len[u]>ans)//最长边经过v  
        {  
            k=node[v]*node[u];  
            ans=temp+Len[u];  
        }  
        else if(temp+Len[u]==ans)  
            k+=node[v]*node[u];  
        if(Len[u]<temp)//更新最长边  
        {  
            Len[u]=temp;  
            node[u]=node[v];  
        }  
        else if(Len[u]==temp)//更新最长边的个数  
            node[u]+=node[v];  
    }  
}  
int main()  
{  
    int n,i,x,y,w;  
    while(scanf("%d",&n)!=-1)  
    {  
        memset(head,-1,sizeof(head));  
        num=0;  
        for(i=1;i<n;i++)  
        {  
            scanf("%d%d%d",&x,&y,&w);  
            addedge(x,y,w);  
        }  
        ans=-inf;k=0;  
        dfs(1,0);  
        printf("%d %d\n",ans,k);  
    }  
    return 0;  
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27778次
    • 积分:4418
    • 等级:
    • 排名:第6726名
    • 原创:433篇
    • 转载:0篇
    • 译文:0篇
    • 评论:11条
    文章分类
    阅读排行