rt,蒟蒻一只,代码求条
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+1;
int n,u,v,x,y;
int l,ans1[N];
int ans;
int f[N],b[N],pos[N];
int idx;
int minn=INT_MAX;
bool g[N][N],vis[N];
struct Kano{
int l,r,deep;
}a[N];
void dfs(int rt,int de)
{
a[rt].deep=de;
vis[rt]=1;
ans1[de]++;
l=max(l,ans1[de]);
int pt=-1;
for(int i=1;i<=n;i++)
{
if(vis[i])
{
continue;
}
else if(g[rt][i])
{
if(a[rt].l==0)
{
a[rt].l=i;
dfs(i,de+1);
}
else
{
a[rt].r=i;
dfs(i,de+1);
}
}
}
ans=max(ans,de);
}
void dfs1(int i,int de)
{
idx++;
pos[i]=idx;
f[idx]=i;
b[idx]=de;
if(a[i].r)
{
dfs1(a[i].r,de+1);
f[++idx]=i;
b[idx]=de;
}
if(a[i].l)
{
dfs1(a[i].l,de+1);
f[++idx]=i;
b[idx]=de;
}
}
int find(int x,int y)
{
int minn=x;
for(int i=x+1;i<=y;i++)
{
if(b[i]<b[minn])minn=i;
}
return f[minn];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
g[u][v]=true;
g[v][u]=true;
}
scanf("%d %d",&x,&y);
if(x>y)swap(x,y);
dfs(1,1);
dfs1(1,1);
printf("%d\n%d\n",ans,l);
int lca=find(pos[x],pos[y]);
int ans1;
if(a[x].deep<a[y].deep)ans1=(abs(a[x].deep-lca))+abs(a[y].deep-lca)*2;
else ans1=(abs(a[x].deep-lca))*2+abs(a[y].deep-lca);
printf("%d",ans1);
return 0;
}