思路:dfs找到x和y与所有点的距离,且x对于某个点的距离一定要大于y对那个点的距离(即为x在y“后面”追);
#include <bits/stdc++.h>
using namespace std;
int n,x,y;
void dfs(vector<vector<int> > &g, vector<int> &d, int u, int fa, int step)
{
for(auto v: g[u])
{
if(v==fa) continue;
d[v]=step+1;
dfs(g,d,v,u,step+1);
}
}
int main()
{
cin>>n>>x>>y;
vector<vector<int> >g(n+1);
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
vector<int>dx(n+1,0);
vector<int>dy(n+1,0);
dfs(g,dx,x,-1,0);
dfs(g,dy,y,-1,0);
int ans=0;
for(int i=1;i<=n;i++)
if(dx[i]>dy[i])
ans=max(ans,dx[i]);
cout<<ans<<endl;
return 0;
}
|