听评论区给了各种#1的坑 有父节点>子节点的编号 这些我都自己试过改了 还是错的
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n;
struct node{
int l,r;
int wid;
}tree[105];
struct node1{
int v;
int w;
};
bool vis[105];
int d[105];
int deep=-1;
vector<node1>e[105];
int num[105];
int maxn=-1;
void dijkstra(int x)
{
memset(d,0x3f,sizeof d);
d[x]=0;
priority_queue<pair<int,int>>q;
q.push({0,x});
while(q.size())
{
auto t=q.top();
q.pop();
int u=t.second;
if(vis[u])continue;
vis[u]=1;
for(auto ed:e[u])
{
int v=ed.v;
int w=ed.w;
if(d[v]>d[u]+w)
{
d[v]=d[u]+w;
q.push({-d[v],v});
}
}
}
}
void dfs(int a,int depth)
{ deep=max(depth,deep);
if(tree[a].l!=0)
{
dfs(tree[a].l,depth+1);
}//不要写成else if 要不然只能走一个
if(tree[a].r!=0)
{
dfs(tree[a].r,depth+1);
}
return ;
}
int main()
{
cin>>n;
tree[1].wid=1;
for(int i=1,a,b;i<=n-1;i++)
{
cin>>a>>b;
tree[b].wid=tree[a].wid+1;
if(tree[a].l==0)
tree[a].l=b;
else if(tree[a].r==0&&tree[a].l)
tree[a].r=b;
e[a].push_back((node1){b,1});
e[b].push_back((node1){a,2});
}
for(int i=1;i<=105;i++)
{ if(tree[i].wid==0)continue;
num[tree[i].wid]++;
}
sort(num+1,num+1+100,greater<int>());
int x,y;
cin>>x>>y;
dijkstra(x);
dfs(1,1);
cout<<deep<<endl;
cout<<num[1]<<endl;
cout<<d[y];
return 0;
}