80分 #3#6WA掉,求助
查看原帖
80分 #3#6WA掉,求助
497817
羊摆摇楼主2022/1/19 00:15

预处理部分

T[1].f=T[1].d=1;

输入部分

	scanf("%d",&n);
	for(int k=1;k<n;k++){
		int a,b;
		scanf("%d%d",&a,&b);
		if(T[a].leaf){
			T[a].l=b;
			T[a].leaf=false;
		}
		else{
			T[a].r=b;
		}
		T[b].f=a;
		T[b].d=T[a].d+1;
	}
	int sta,fin;
	scanf("%d%d",&sta,&fin);

求深度函数

int dep(int nod){
	if(T[nod].leaf)return 1;
	else return max(dep(T[nod].l),dep(T[nod].r))+1;
}

求宽度函数

int wei(){
	int maxn=INT_MIN;
	for(int k=1;k<=n;k++)W[T[k].d]++;
	for(int k=1;k<=100;k++)maxn=max(maxn,W[k]);
	return maxn;
}

求距离函数

(基本就这里出问题,而且十分令蒟蒻痛苦)

int dfs(int sta,int fin){
	int rcd=sta;
	vector<int> F1;
	vector<int> F2;
	while(1){
		F1.push_back(rcd);
		rcd=T[rcd].f;
		if(rcd==1){
			F1.push_back(1);
			break;
		}
	}
	rcd=fin;
	while(1){
		F2.push_back(rcd);
		rcd=T[rcd].f;
		if(rcd==1){
			F2.push_back(1);
			break;
		}
	}
	int z1=F1.size()-1,z2=F2.size()-1;
	for(;;z1--,z2--){ 
		if(F1[z1]!=F2[z2]){
			return (z1+1)*2+z2+1;
		}
		else if(z1==0)return z2-1;
		else if(z2==0)return z1*2;
	}
}

已经尽力改码风了,球球各位dalao好心看看吧...

2022/1/19 00:15
加载中...