poj2631 Roads in the North 树的直径

网友投稿 748 2022-08-29

poj2631 Roads in the North 树的直径

poj2631 Roads in the North 树的直径

​​ Description

Building and maintaining roads among communities in the far North is an expensive business. With this in mind, the roads are build such that there is only one route from a village to a village that does not pass through some other village twice. Given is an area in the far North comprising a number of villages and roads among them such that any village can be reached by road from any other village. Your job is to find the road distance between the two most remote villages in the area.

The area has up to 10,000 villages connected by road segments. The villages are numbered from 1. Input

Input to the problem is a sequence of lines, each containing three positive integers: the number of a village, the number of a different village, and the length of the road segment connecting the villages in kilometers. All road segments are two-way. Output

You are to output a single integer: the road distance between the two most remote villages in the area. Sample Input

5 1 6 1 4 5 6 3 9 2 6 8 6 1 7 Sample Output

22 Source

The UofA Local 1999.10.16

求树的直径 裸题

#include#include#define N 11000struct node{ int y,next,z;}data[N<<1];int x,y,z,h[N],fa[N],max1,pos,dep[N],ans,num;void dfs1(int x){ for (int i=h[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if (fa[x]==y) continue; dep[y]=dep[x]+z;fa[y]=x;dfs1(y); if (dep[y]>max1) max1=dep[y],pos=y; }}int main(){ //freopen("poj2631.in","r",stdin); while (~scanf("%d%d%d",&x,&y,&z)){ data[++num].y=y;data[num].z=z;data[num].next=h[x];h[x]=num; data[++num].y=x;data[num].z=z;data[num].next=h[y];h[y]=num; }dep[x]=0; dfs1(x);memset(fa,0,sizeof(fa));dep[pos]=0;int pp=pos;max1=0; dfs1(pp);memset(fa,0,sizeof(fa)); printf("%d",max1);}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:你说熟悉MySQL事务,那来谈谈事务的实现原理吧!(mysql事务如何实现)
下一篇:bzoj 4568 [Scoi2016]幸运数字
相关文章

 发表评论

暂时没有评论,来抢沙发吧~