求助!!!
查看原帖
求助!!!
107344
Ricardo_21楼主2020/11/2 20:50

求证树的直径算法正确性并以下代码的错误性

谢!

#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;
}
2020/11/2 20:50
加载中...