POJ P1985 Cow Marathon 题解

这道题是我们考试的第一题,非常水,就是一个树的直径的板子。详见上一篇博客。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define maxn 40000
 6 using namespace std;
 7 int n,m,cnt=0,ans,f_num;
 8 int head[2*maxn+10],d[maxn+10];
 9 struct node
10 {
11     int u,v,w,nex;
12 }edge[2*maxn+10];
13 inline void add(int x,int y,int z)
14 {
15     cnt++;
16     edge[cnt].u=x;
17     edge[cnt].v=y;
18     edge[cnt].w=z;
19     edge[cnt].nex=head[x];
20     head[x]=cnt;
21 }
22 inline void dfs(int x,int fa)
23 {
24     if(ans<d[x])
25     {
26         ans=d[x];
27         f_num=x;
28     }
29     for(int i=head[x];i!=-1;i=edge[i].nex)
30     {
31         int to=edge[i].v;
32         if(to==fa)continue;
33         d[to]=d[x]+edge[i].w;
34         dfs(to,x);
35     }
36 }
37 int main()
38 {
39     freopen("marathon.in","r",stdin);
40     freopen("marathon.out","w",stdout);
41     memset(head,-1,sizeof(head));
42     scanf("%d%d",&n,&m);
43     for(int i=1;i<=m;i++)
44     {
45         int x,y,z;
46         char xb;
47         scanf("%d%d%d",&x,&y,&z);
48         cin>>xb;
49         add(x,y,z);
50         add(y,x,z);
51     }
52     ans=0;
53     d[1]=0;
54     dfs(1,0);
55     ans=0;
56     d[f_num]=0;
57     dfs(f_num,0);
58     printf("%d",ans);
59     return 0;
60 }
请各位大佬斧正(反正我不认识斧正是什么意思)
原文地址:https://www.cnblogs.com/handsome-zyc/p/11237548.html