P3884 [JLOI2009]二叉树问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
int mp[110][110];
int d[110];
int P[110][110];
vector<int> q[110];
int vis[110];
int mmax=0;
const int INF = 1e9+7;
void dfs(int x,int id)
{
//cout<<x<<" "<<id<<endl;
d[id]++;
vis[x]=1;
mmax = max(id,mmax);
for(int i=0;i<q[x].size();i++)
{
if(!vis[q[x][i]])
{
dfs(q[x][i],id+1);
mp[q[x][i]][x]=2;
}
}
return;
}
void init_(int n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
mp[i][j]=INF;
}
}
}
bool com(int x,int y)
{
return x>y;
}
int main()
{
int n;
cin>>n;
init_(n);
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
mp[u][v]=1;
mp[v][u]=1;
q[u].push_back(v);
q[v].push_back(u);
}
int x,y;
cin>>x>>y;
dfs(1,1);
sort(d,d+n+1,com);
cout<<mmax<<endl<<d[0]<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
if(mp[j][k]>mp[j][i]+mp[i][k])
{
mp[j][k]=mp[j][i]+mp[i][k];
P[j][k]=i;
}
}
}
}
cout<<mp[x][y]<<endl;
return 0;
}