理解题
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <bitset>
#include <cstdlib>
#include <cmath>
#include <set>
#include <list>
#include <deque>
#include <map>
#include <queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 1000000000;
const int maxn = 200010;
int T,n,m;
vector <int> g[maxn];
int level[maxn];
int fa[maxn];
int res=0;
void dfs (int s,int f,int t){
int i;
level[s] = t;
fa[s]= f;
for (i=0;i<g[s].size ();i++){
int v= g[s][i];
if (v==f) continue;
dfs (v,s,t+1);
}
return;
}
void dfs2 (int s,int t){
int i;
res = max (res,t);
for (i=0;i<g[s].size ();i++){
int v = g[s][i];
if (level[v]<level[s]) continue;
dfs2 (v,t+1);
}
return;
}
int main (){
int n,x;
int i,j;
scanf ("%d %d",&n,&x);
for (i=1;i<n;i++){
int a,b;
scanf ("%d %d",&a,&b);
g[a].push_back (b);
g[b].push_back (a);
}
dfs (1,0,1);
int t;
if ((1+x)%2==0){
t = (1+x)/2-1;
}
else t = (1+x)/2;
int v= x;
for (i=2;i<=t;i++){
v =fa[x];
}
res = 0;
dfs2 (v,0);
printf("%d\n", 2*(level[v]-level[1]+res) );
return 0;
}