1 int dfs(int u,int fa){ 2 int d1=0,d2=0; 3 for(int i=head[u];i;i=e[i].next){ 4 int v=e[i].v; 5 if(v==fa) 6 continue; 7 int d=dfs(v)+e[i].w; 8 if(d>d1){ 9 d2=d1,d1=d; 10 } 11 else if(d>d2) 12 d2=d; 13 } 14 ans=max(ans,d1+d2); 15 return d; 16 }
可以任取一个节点作为根节点做为根节点,因为这个过程是递归的,可以证明这与取n个节点再求的答案是一样的
标签:int,dfs,ans,直径,d2,节点,d1 From: https://www.cnblogs.com/YYcanmake/p/16585801.html