这道题是我们考试的第一题,非常水,就是一个树的直径的板子。详见上一篇博客。
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 }
请各位大佬斧正(反正我不认识斧正是什么意思)