zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 22 C. The Tag Game

    题目链接:Educational Codeforces Round 22 C. The Tag Game

    题意:

    给你一棵树,Alice在顶点1,Bob在顶点x,每人轮流走一步,每次可以去相邻的节点。

    如果Alice走到Bob的位置,游戏结束。

    Bob想让游戏的轮数尽可能多,Alice想让游戏的轮数尽可能少。

    双方都采取最优策略。问游戏持续多久。

    题解:

    显然,Bob要向以1为根的树深度最深的节点走。

    不过有可能Bob在其他的子树上,所以dfs一下每个节点的最大深度,

    然后判断一下Bob能走到的最大深度就行了。

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=(a);i<=(b);++i)
     3 using namespace std;
     4 typedef long long ll;
     5 
     6 const int N=2e5+7;
     7 int n,m,x,y,mx[N],dep[N],ans,f[N];
     8 vector<int>g[N];
     9 
    10 void dfs(int x=1,int cnt=0,int fa=0)
    11 {
    12     dep[x]=cnt,mx[x]=cnt,f[x]=fa;
    13     for(auto &it:g[x])if(it!=fa)
    14         dfs(it,cnt+1,x),mx[x]=max(mx[x],mx[it]);
    15 }
    16 
    17 int main()
    18 {
    19     scanf("%d%d",&n,&m);
    20     F(i,1,n-1)
    21     {
    22         scanf("%d%d",&x,&y);
    23         g[x].push_back(y);
    24         g[y].push_back(x);
    25     }
    26     dfs(),ans=mx[m];
    27     int now=m;
    28     while(f[now]!=1)
    29     {
    30         if(dep[now]>dep[m]-dep[now])ans=mx[now];
    31         now=f[now];
    32     }
    33     printf("%d
    ",ans*2);
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    微信支付
    设计模式
    微信,根据经纬度获取当前城市
    移动端下拉刷新
    angular-seed — AngularJS种子项目
    Send Email
    angularjs 控制器
    ajax 图片上传
    Jpeg-Baseline和Progressive JPEG的区别
    QT启动一个工程
  • 原文地址:https://www.cnblogs.com/bin-gege/p/7126624.html
Copyright © 2011-2022 走看看