<题目链接>

题目大意:
A、B两人在一颗树上,A在根节点1上,B在节点x上,现在他们轮流走,每次只能走一步,或者不走。A以尽可能靠近B的方式行走,B以尽可能远离A的方式走,B先开始走。问你这两人相遇时,总共走了多少步。

解题分析:

模拟A、B走路的过程可以发现,其实A、B走路的步数就是在B所能够到达的点中,距离A最远的点*2。所谓B能够到达的点就是,B到达这个点的最短时间一定要小于A达到这个点的最短时间。否则B就会在这个点出被A抓住。因为是B先走,所以B只要走那些比A先到的节点,就一定只会和A在距A最远的叶子节点相遇,因为B到了那个叶子节点之后,一定会选择一直不动,所以A、B相遇的时间就如上面所述。

#include <bits/stdc++.h>
using namespace std;
template<typename T>
inline void read(T&x){
    x=;;char c=getchar();
    ;c=getchar(); }
    +c-';c=getchar(); }
    x*=f;
}
;
const int INF = 0x3f3f3f3f;

int n,x,ans,cnt,loc;
int head[N],d1[N],d2[N],vis[N];
];

inline void add(int u,int v){
    e[++cnt]=(Edge){v,head[u]};
    head[u]=cnt;
}
void bfs1(int st){      //将根节点到所有点的最短距离全部求出来
    memset(d1,0x3f,sizeof(d1));
    d1[st]=;
    queue<int>q;
    q.push(st);vis[st]=;
    while(q.size()){
        int u=q.front();q.pop();
        for(int i=head[u];i;i=e[i].nxt){
            int v=e[i].to;
            if(vis[v])continue;
            d1[v]=d1[u]+;
            vis[v]=;
            q.push(v);
        }
    }
}
void bfs2(int st){     //将x能够到达的所有点的最短距离求出来
    memset(d2,0x3f,sizeof(d2));
    memset(vis,,sizeof(vis));
    d2[st]=;vis[st]=;ans=d1[st];
    queue<int>q;q.push(st);
    while(q.size()){
        int u=q.front();q.pop();
        for(int i=head[u];i;i=e[i].nxt){
            int v=e[i].to;
            )>=d1[v])continue;    //如果到达该点的时间晚于1节点到达的时间
            d2[v]=d2[u]+;vis[v]=;
            //此时v点B能够到达
            ans=max(ans,d1[v]);
            q.push(v);
        }
    }
}
int main(){
    read(n);read(x);
    ;i<n;i++){
        int u,v;read(u);read(v);
        add(u,v);add(v,u);
    }
    bfs1();
/*    for(int i=1;i<=n;i++){
        printf("i=%d,d1=%d\n",i,d1[i]);
    }   */
    bfs2(x);
    printf(*ans);
}

Codeforces 813C The Tag Game (BFS最短路)的更多相关文章

  1. Codeforces 954D Fight Against Traffic(BFS 最短路)

    题目链接:Fight Against Traffic 题意:有n个点个m条双向边,现在给出两个点S和T并要增加一条边,问增加一条边且S和T之间距离不变短的情况有几种? 题解:首先dfs求一下S到其他点 ...

  2. codeforces 813C The Tag Game 树+dfs追击问题

    C. The Tag Gametime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutpu ...

  3. CodeForces - 813C The Tag Game (树的dfs遍历)

    [传送门]http://codeforces.com/problemset/problem/813/C [题目大意]两个人玩游戏,一个人跑一个人追,轮流决策,可以走也可以不走.给你一棵树,想要从某个结 ...

  4. CodeForces - 813C The Tag Game(拉格朗日乘数法,限制条件求最值)

    [传送门]http://codeforces.com/problemset/problem/813/C [题意]给定整数a,b,c,s,求使得  xa yb zc值最大的实数 x,y,z , 其中x ...

  5. POJ 2251 Dungeon Master (BFS最短路)

    三维空间里BFS最短路 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  6. 【bzoj5049】[Lydsy九月月赛]导航系统 并查集+双向BFS最短路

    题目描述 给你一张 $n$ 个点 $m$ 条边的随机图,边权为1.$k$ 次询问两点间最短路,不连通则输出-1. 输入 第一行包含3个正整数n,m,k(2<=n<=100000,1< ...

  7. 【bzoj1189】[HNOI2007]紧急疏散evacuate BFS最短路+动态加边网络流

    题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以 ...

  8. BZOJ 1195 [HNOI2006]最短母串 (Trie图+状压+bfs最短路)

    BZOJ1195 LOJ10061 题目大意:给你$n$个模式串,求一个最短且字典序最小的文本串并输出这个串,$n<=12,len<=50$ 首先对所有模式串构造$Trie$图,$Trie ...

  9. UVa 1600 Patrol Robot (BFS最短路 && 略不一样的vis标记)

    题意 : 机器人要从一个m * n 网格的左上角(1,1) 走到右下角(m, n).网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示).机器人每次可以往4个方向走一格,但不能连续地穿越k( ...

随机推荐

  1. 吐血记录微信小程序授权获取Unionid及linux下使用bouncycastle解密用户数据 遇到的坑

    背景 公司小程序上线了,发现系统无法拿到一些用户的UniondID.但是上线前的测试一切都是正常的. 坑1 经排查,发现一些用户通过下面的接口无法得到unionid https://api.weixi ...

  2. 小程序 <web-view></web-view> 中使用 form 表单提交

    在最近的小程序项目中,使用到了 <web-view></web-view> 内嵌 H5 页面,在 H5 中需要使用 form 表单提交数据. H5 使用的技术框架是 vue+v ...

  3. AB PLC首次IP地址如何分配

    AB PLC首次IP地址如何分配,这里介绍的方法是针对CompactLogix和ControlLogix控制器 一.准备工作 AB PLC控制器一台,本文以5069-L330ER为例,将其通电: 笔记 ...

  4. MySQL数据库 Too many connections

    出现这种错误明显就是 mysql_connect 之后忘记 mysql_close:当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个, ...

  5. day 19 - 1 模块

    collections 模块 在内置数据类型(dict.list.set.tuple)的基础上,collections 模块还提供了几个额外的数据类型:Counter.deque.defaultdic ...

  6. 安装版本( 相关关系 Vue SSR 指定版本)

    1. 关于 brew mac包管理器 终端安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebr ...

  7. [系统集成] 基于 elasticsearch 的企业监控方案

    注: 2017年10月16日: 使用中发现 es 查询时序数据的性能较差,且 watch 脚本的编写比较麻烦,因此已将监控系统切换到了 influxdb+grafana平台.新监控系统各方面情况比较满 ...

  8. CoordinatorLayout 嵌套 AppBarLayout RecyclerView ,通过代码控制,使得CoordinatorLayout 自动滑动到tab置顶的位置

    有两个方式可以实现 一:调用AppBarLayout,设置间距 val behavior = (appbar_layout.getLayoutParams() as CoordinatorLayout ...

  9. referrer policy

    我们知道,在页面引入图片.JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求,浏览器一般都会给这些请求头加上表示来源的 Referrer 字段.Referrer 在分析用户来源时 ...

  10. hibernate核心类及常用方法

    Configuration configure = new Configuration().configure(); SessionFactory factory = configure.buildS ...