求树的最长直径,之前做过hdu2196,套用那道题的思路,两次dfs,求出每个结点的最长直径,然后找出最大的即为整棵树的最长直径
#pragma comment(linker, "/STACK:102400000,102400000")
#include<iostream>
#include<cstdio>
#include<cstring>
#define M 100010
#define ME 1000010
using namespace std;
struct node{
int to,val,next;
}edge[ME*2];
int head[M];
int tot;
int n,m;
int len[M],len2[M],lenid[M];
bool vis[M];
int ans;
void insert(int u,int v,int val){
edge[tot].to=v;
edge[tot].val=val;
edge[tot].next=head[u];
head[u]=tot++;
}
bool dfs(int u,int pre){ //判环
vis[u]=true;
int i,v;
for(i=head[u];i!=-1;i=edge[i].next){
v=edge[i].to;
if(v==pre) continue;
if(vis[v]||dfs(v,u)) return true;
}
return fals