1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include <cstdlib> #include <algorithm> #include <cstring> #include <cctype> using namespace std; typedef long long ll; int n,x,at[200005],to[400005],_next[400005],cnt=0; int ldis[200005]={0},rdis[200005]={0},ans=0; bool vis[200005]={0}; void (){ scanf("%d%d",&n,&x); int u,v; memset(at,-1,sizeof(at)); for(int i=0;i<n-1;i++){ scanf("%d%d",&u,&v); u--,v--; to[cnt]=v,_next[cnt]=at[u],at[u]=cnt++; to[cnt]=u,_next[cnt]=at[v],at[v]=cnt++; } } void dfs(int cur,int *dis){ for(int i=at[cur];i!=-1;i=_next[i]){ if(!vis[to[i]]) vis[to[i]]=1, dis[to[i]]=dis[cur]+1, dfs(to[i],dis); } } void dfs2(int cur){ for(int i=at[cur];i!=-1;i=_next[i]){ if(!vis[to[i]]&&ldis[to[i]]>rdis[to[i]]) vis[to[i]]=1,dfs2(to[i]); } ans=max(ans,ldis[cur]); } void solve(){ vis[0]=1,dfs(0,ldis); memset(vis,0,sizeof(vis)); vis[x-1]=1,dfs(x-1,rdis); memset(vis,0,sizeof(vis)); dfs2(x-1); printf("%dn",ans*2); } int main(){ init(); solve(); return 0; }
|
近期评论