树的直径
时间限制: 1 Sec 内存限制: 128 MB
题目描述
一棵树有n个节点,1号节点为根节点,求树的直径。
输入
第一行是整数n,表示节点数
后面若干行,每行两个整数a b,表示b是a的子节点。
输出
求这棵树的直径长度
样例输入
5
1 2
1 3
3 4
3 5
样例输出
3
一道模板,无话可说
#include<cstdio>
#include<algorithm>
#define SI 200005
using namespace std;
struct edge {
int next,to;
}e[SI<<1];
int n,cnt,ans,head[SI],d[SI];
bool v[SI];
inline void add(int x,int y) {
e[++cnt].to=y,e[cnt].next=head[x],head[x]=cnt;
}
inline void dp(int x) {
v[x]=true;
for(int i=head[x];i;i=e[i].next) {
int y=e[i].to;
if(v[y]) continue;
dp(y);
ans=max(ans,d[x]+d[y]+1);
d[x]=max(d[x],d[y]+1);
}
}
int main() {
scanf("%d",&n);
for(int i=1;i<n;i++) {
int x,y;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
dp(1);
printf("%d",ans);
return 0;
}