qwq萌新只会暴力找祖先 3和6错了
#include<iostream>
using namespace std;
const int size = 101;
struct node{
long long fa,deep;
};
node nd[size];
int u,v;
int n;
int sn,en; // 开始与结束
int coll_root_b[size]; // b的父亲结点集合
int num[size],num2[size];
int root;
int r_root;
int location;
long long maxans,maxwid[size];
void findroot(int u,int loc){ //查找root
if(nd[u].fa==-1){
location=loc;
return;
}
num[nd[u].fa]=loc;
coll_root_b[loc]=nd[u].fa;
//cout<<nd[u].fa;
//cout<<coll_root_b[loc];
findroot(nd[u].fa,loc+1);
}
long long loc2=1;
long long dfs(int u){
if(nd[u].fa==-1) return -1; //没有找到
int tmp = nd[u].fa;
num2[nd[u].fa]= loc2++;
for(int i=0;i<location;i++){
if(coll_root_b[i]==tmp){
return tmp;
}
}
dfs(nd[u].fa);
}
int main(){
cin>>n;
nd[1].fa=-1;
nd[1].deep=1;
for(int i=1;i<=n-1;i++){
cin>>u>>v;
nd[v].fa=u;
nd[v].deep = nd[u].deep+1;
maxans = max(maxans,nd[v].deep);
maxwid[nd[u].deep]++;
}
cin>>sn>>en;
findroot(en,1);
//for(int i=1;i<location;i++) cout<<coll_root_b[i]<<"|";
r_root = dfs(sn);
long long ans = num[r_root] + num2[r_root]*2;
long long width=1;
for(int i=1;i<=maxans;i++) width=max(width,maxwid[i]);
if(sn==en){
cout<<maxans<<endl;
cout<<width<<endl;
cout<<"0";
return 0;
}
cout<<maxans<<endl;
cout<<width<<endl;
cout<<ans;
return 0;
}