树上最长路其实很好写。只需要两边dfs。 第一遍从随意一个点dfs,找到最远距离的那一点。然后从那一个点进行 第二遍的dfs,最后求出来的max,就是树上的最长距离。
代码:
int maxx = -1,maxid;
void dfs(int p,int fa,int dep){
if(maxx < dep){
maxx = dep;
maxid = p;
}
for(int i = head[p]; ~i ;i = edge[i].nex){
if(edge[i].v == fa) continue;
dfs(edge[i].v,p,dep + 1);
}
}
int main()
{
/*
输入图
*/
dfs(1,-1,1);
dfs(maxid,-1,1);
printf("%d\n",maxx);
}