Codeforces 813C The Tag Game

来源:互联网 发布:linux启动图形化命令 编辑:程序博客网 时间:2024/05/21 10:14
理解题
// 38#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];    }    //printf("%d\n",v);    res = 0;    dfs2 (v,0);    //printf("%d\n",res);    printf("%d\n", 2*(level[v]-level[1]+res) );    return 0;}
原创粉丝点击