求证树的直径算法正确性并以下代码的错误性
谢!
#include<bits/stdc++.h>
#define M 1000010
using namespace std;
int n,k;
int maxn,num,cnt;
int head[M],d[M],nex[M*2],ver[M*2];
int maxd[M],f[M],ans[M];
int s;
bool flag=false;
void add_edge(int x,int y){
ver[++cnt]=y;
nex[cnt]=head[x];
head[x]=cnt;
}
int read(){
int x=0,y=1;
char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-') y=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
x=x*10+ch-'0';
ch=getchar();
}
return x*y;
}
void dfs(int x,int fa){
if(d[x]>maxn){
maxn=d[x];
num=x;
}
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(y==fa) continue;
d[y]=d[x]+1;
//if(flag) f[y]=x;
dfs(y,x);
}
}
int main(){
n=read();
for(int i=1;i<=n-1;i++){
int x,y;
x=read(); y=read();
add_edge(x,y);
add_edge(y,x);
}
dfs(1,0);
int ss=num;
dfs(ss,0);
cout<<ss<<endl;
return 0;
}