tjut 3534
来源:互联网 发布:网络克隆系统教程 编辑:程序博客网 时间:2024/04/29 15:52
#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
- tjut 3534
- tjut 5289
- tjut 5288
- tjut 5294
- tjut 2586
- tjut 5296
- tjut 5297
- tjut 5299
- tjut 5384
- tjut 5387
- tjut 5386
- tjut 5381
- tjut 5400
- tjut 5399
- tjut 5396
- tjut 5398
- tjut 5412
- tjut 5410
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- 页面布局
- lightoj 1042 经典的位运算
- 第1-7讲的总和项目
- final关键字详解
- tjut 3534
- 广告效果监测
- 中兴编程题--获取未命中个数
- 稳定排序和不稳定排序
- C++多文件程序
- centos下配置crontab
- QMAKESPEC理解与使用
- java中类与类之间的几种关系
- [Offer收割]编程练习赛7