#求救!3号点和6号点出错!
查看原帖
#求救!3号点和6号点出错!
351042
kardsOI楼主2022/4/28 20:36
//题目:P3884二叉树问题 
#include<bits/stdc++.h>
using namespace std;
unsigned long long maxn,a[101][101],n,t1,t2,l[101],t[101];
unsigned long long way1[110],way2[110],head1,head2;
bool u1,u2;
int w(unsigned long long y,unsigned long long z)
{
	if(l[y]==0)
	{
		if(z>maxn)
		{
			maxn=z;
		}
		return 0;
	}
	for(int i=1;i<=l[y];i++)
	{
		w(a[y][i],z+1);
	}
	return 0;
}
int x(unsigned long long y,unsigned long long z)
{
	if(l[y]==0)
	{
		return 0;
	} 
	t[z]+=l[y];
	for(int i=1;i<=l[y];i++)
	{
		x(a[y][i],z+1);
	}
	return 0;
}
int c(int y)
{
	if(y==t1)
	{
		u1=1;
	}
	if(y==t2)
	{
		u2=1;
	}
	if(l[y]==0)
	{
		return 0;
	}
		if(!u1)
	{
		head1++;
		way1[head1]=y;
	}
	if(!u2)
	{
		head2++;
		way2[head2]=y;
	}
	for(int i=1;i<=l[y];i++)
	{
		c(a[y][i]);
	}
	if(!u1)
	{
		way1[head1]=0;
		head1--;
	}
	if(!u2)
	{
		way2[head2]=0;
		head2--;
	}
	return 0;
}
int main()
{
	cin>>n;
	for(int i=1;i<n;i++)
	{
		cin>>t1>>t2;
		a[t1][++l[t1]]=t2;
	}
	cin>>t1>>t2;
	w(1,1);
	cout<<maxn<<endl;
	t[1]=1;
	x(1,2);
	sort(t+1,t+maxn+1);
	cout<<t[maxn]<<endl;
	c(1);
	for(int i=head1;i>=1;i--)
	{
		for(int j=1;j<=head2;j++)
		{
			if(way1[i]==way2[j])
			{
				cout<<(head1-i+1)*2+(head2-j+1);
				return 0;
			}
		}
	}
}
2022/4/28 20:36
加载中...