九分求助,玄关
查看原帖
九分求助,玄关
877968
1233211234567a楼主2024/4/13 17:56
#include<bits/stdc++.h>
using namespace std;
struct root{
	int id;
	int parents;
	int c1,c2;
};
root a[101]={};
int ans;
int y,f;
void dfs(int x,int sum){
	if(x==1){
		f=1;
	}
	if(a[x].c1+a[x].c2==0&&f==1){
		return;
	}
	if(x==y){
		if(f==0){
			sum+=2;
		}else{
			sum++;
		}
		ans=max(ans,sum);
		return;
	}
	if(f==0){
		dfs(a[x].parents,sum+2);
	}else{
		dfs(a[x].c1,sum++);
		dfs(a[x].c2,sum++);
	}
}
int main(){
	long long n;
    cin>>n;
	a[1].parents=-1;
	for(int i=1;i<=n;i++){
		a[i].id=i;
	}
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		a[y].parents=x;
		if(a[x].c1==0){
			a[x].c1=y;
		}else{
			a[x].c2=y;
		}
	}
	int x;
	cin>>x>>y;
	int x1=-1;
	for(int i=n;i>=1;i--){
		if(a[i].c1+a[i].c2==0){
			int xx1=1,f=a[i].parents;
			while(f!=1){
				xx1++;
				f=a[f].parents;
			}
			xx1++;
			x1=max(x1,xx1);
		}else{
			break;
		}
	}
	int xx2=0,xx3=0;
    for(int i=n;i>=1;i--){
		if(a[i].c1+a[i].c2==0){
			int xx1=1,f=a[i].parents;
			while(f>=4){
				xx1++;
				f=a[f].parents;
			}
			if(f==2){
				xx2+=xx1;
			}else{
				xx3+=xx1;
			}
		}else{
			break;
		}
	}
	dfs(x,0);
    cout<<x1<<"\n"<<max(xx2,xx3)<<"\n";
	cout<<ans; 
	return 0;
}
2024/4/13 17:56
加载中...