题目链接:http://codeforces.com/problemset/problem/813/C

题意:给出一颗树,开始时两个人 Alice 和 Bob 分别站在 1(树根)和 x 处.此后每一次操作两人都可以选择在原地不动或者移动到相邻的节点(Bob先移动);

直至两人移到同一个位置,两人移动的总步数为 ans,Alice要使 ans 尽量小,Bob 要使 ans 尽量大,输出ans;

思路:假设最终在 p 位置相遇,显然 p 是由先移动的 Bob 决定的,即 p 能使 ans 最大;

用 dis1[p] 表示 1 到 p 的距离,dis2[p] 表示 x 到 p 的距离,要满足 Alice 和 Bob 在移动到 p 之前不相遇,所以有 dis1[p] > dis2[p],那么显然有 ans = 2 * dis1[p];

即:先 bfs 出 1 和 x 到其他节点的最短距离,再遍历所有节点,对于节点 i,若满足 dis1[i] > dis2[i] ,则 ans = max(ans, 2 * dis1[i]),最终输出 ans 即可;

代码:

 #include <iostream>
#include <stdio.h>
#include <vector>
#include <queue>
#include <string.h>
using namespace std; const int MAXN = 2e5 + ;
vector<int> mp[MAXN];
bool vis[MAXN]; void bfs(int dis[MAXN], int p){//求以 p 为根时其余个点到 p 的距离
memset(vis, , sizeof(vis));
int ans = , cnt1 = , cnt2 = ;
queue<int> q;
q.push(p);
vis[p] = true;
while(!q.empty()){
while(cnt1--){
int cnt = q.front();
q.pop();
for(int i = ; i < mp[cnt].size(); i++){
int cc = mp[cnt][i];
if(!vis[cc]){
q.push(mp[cnt][i]);
vis[mp[cnt][i]] = true;
cnt2++;
}
}
dis[cnt] = ans;
}
cnt1 = cnt2;
cnt2 = ;
ans++;
}
} int main(void){
int n, x;
scanf("%d%d", &n, &x);
for(int i = ; i < n - ; i++){
int s, e;
scanf("%d%d", &s, &e);
mp[s].push_back(e);
mp[e].push_back(s);
}
int dis1[MAXN], dis2[MAXN];
bfs(dis1, );
bfs(dis2, x);
int ans = ;
for(int i = ; i <= n; i++){
if(dis1[i] > dis2[i] && mp[i].size() == ){
ans = max(ans, dis1[i]*);
}
}
cout << ans << endl;
return ;
}

cf813C(bfs)的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  3. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  4. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  5. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  6. Sicily 1048: Inverso(BFS)

    题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  9. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

随机推荐

  1. 移动端 (H5) 调试工具 -- vconsole

    最近在改一个移动端项目,在手机上调试贼头疼,什么日志都看不到,分析不了bug问题. 然后我同事给我介绍了一个移动端的调试神器 -- vconsole 有了这个神器,领导再也不用担心我的工作啦!!! 0 ...

  2. AFNetworking3.0使用简介

    注意到咱们集成的版本为3.0.4. 下面的类已从AFNetworking 3.0中废弃: AFURLConnectionOperation AFHTTPRequestOperation AFHTTPR ...

  3. java多线程系列 JUC原子类 CAS及原子类

    根据数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicInteg ...

  4. 在Linux下搭建我的世界(Minecraft)服务器

    最近薅了百度云双12的羊毛,1核2G一年150.突然想起以前大学整个宿舍通宵开黑挖泥土的岁月,所以刚好趁着这台服务器,打算自己搭建一个我的世界服务器,重温一下以前的感觉. 超详细Linux搭建Java ...

  5. 小米系列手机调试Installation failed with message Failed to establish session

    用Android studio 2.3调度程序时提示"Installation failed with message Failed to establish session"错误 ...

  6. eclipse批量修改package、import中的包名

    问题:想把以前开发的包,用到新项目中,怎么操作呢? 解决方案: 把文件夹复制到新项目包中,同时需要更改很多package.import中的包名第一步:打开一个java文件,选中要替换的字段: 第二步: ...

  7. Ajax不能接受php return值的原因

    PHP在处理ajax返回值的时候,如果使用return如 return $result会失败,echo $result却没问题.解释原因如下: 1.ajax请求从服务器端读取返回值,而且这些返回值必须 ...

  8. OpenCv-Python 图像处理基本操作

    1. 图片加载.显示和保存 import cv2 img = cv2.imread("01.jpg") imgGrey = cv2.imread("01.jpg" ...

  9. 【Lintcode】077.Longest Common Subsequence

    题目: Given two strings, find the longest common subsequence (LCS). Your code should return the length ...

  10. ceph安装对象网关

    1.概述 安装3个网关节点分别是:controller-03.controller-04和controller-05,使用ceph gw自带的Civetweb提供服务,前端使用nginx作为前端代理. ...