1356: Catch

Time Limit: 2 Sec  Memory Limit: 128 MB
Submit:
96  Solved: 40
[Submit][Status][Web
Board
]

Description

A thief is running away!
We can consider
the city where he locates as an undirected graph in which nodes stand for
crosses and edges stand for streets. The crosses are labeled from 0 to N–1.

The tricky thief starts his escaping from cross S. Each moment he moves to
an adjacent cross. More exactly, assume he is at cross u at the moment t. He may
appear at cross v at moment t + 1 if and only if there is a street between cross
u and cross v. Notice that he may not stay at the same cross in two consecutive
moment.
The cops want to know if there’s some moment at which it’s possible
for the thief to appear at any cross in the city.

Input

The input contains multiple test cases:
In
the first line of the input there’s an integer T which is the number of test
cases. Then the description of T test cases will be given.
For any test
case, the first line contains three integers N (≤ 100 000), M (≤ 500 000), and
S. N is the number of crosses. M is the number of streets and S is the index of
the cross where the thief starts his escaping.
For the next M lines, there
will be 2 integers u and v in each line (0 ≤ u, v < N). It means there’s an
undirected street between cross u and cross v.

Output

For each test case, output one line to tell
if there’s a moment that it’s possible for the thief to appear at any cross.
Look at the sample output for output format.

Sample Input

2
3 3 0
0 1
0 2
1 2
2 1 0
0 1

Sample Output

Case 1: YES
Case 2: NO

HINT

For the first case, just look at the table below. (YES means the thief may appear at the cross at that moment)

For the
second input, at any moment, there’s at least one cross that the thief can’t
reach.

 
题意:T组测试数据
n,m  ,S   代表n个节点 下表0~n-1 ;  m条边。s代表起始点。
有个人,在s点走,记为moment 0 ,此时只可能出现在s点。
下一刻,只能到其相邻的点,不能在原地不动。
 
问是否满足,有一时刻,他可能出现在任何一点。
 
思路:对于某一个,如果它能在奇数时间,和偶是时间到达的话,就满足条件。
        问题转化为寻找一个奇数环,来延迟时间。切换奇偶时间。
 #include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std; vector<int>Q[];
int num[];
int vis[];
bool use[];
queue<int>H; void add(int x,int y)
{
num[x]++;
Q[x].push_back(y);
}
bool bfs(int start)
{
int i,cur,now,x;
H.push(start);
use[start]=true;
vis[start]=;
while( !H.empty() )
{
x=H.front();
H.pop();
cur=vis[x];
if(cur==) cur=;
else if(cur==) cur=; for(i=;i<num[x];i++)
{
now=Q[x][i];
if(use[now]==true)
{
if( (vis[now]==&&cur== ) || ( vis[now]== && cur== ))
{// 我很奇怪,为什么if( vis[now]!=cur)就错了,
//照理说,我的vis[now]的值已经被修改过的,不是-1.
return true;
}
continue;
}
vis[now]=cur;
use[now]=true;
H.push(now);
}
}
return false;
}
int main()
{
int T,n,m,s,t;
int i,x,y;
scanf("%d",&T);
for(t=;t<=T;t++)
{
scanf("%d%d%d",&n,&m,&s);
memset(num,,sizeof(num));
memset(vis,-,sizeof(vis));
memset(use,false,sizeof(use));
for(i=;i<=n;i++)
Q[i].clear();
for(i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
printf("Case %d: ",t);
if( bfs(s) ==true)
printf("YES\n");
else printf("NO\n");
}
return ;
}

csu 1356 Catch bfs(vector)的更多相关文章

  1. STL--向量(vector)

    STL的组成 标准模板库STL关注的重点是泛型数据结构和算法,其关键组成部分是容器(containers).算法(algorithms).迭代器(iterators).函数对象(Function Ob ...

  2. R语言编程艺术# 数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  3. STL标准模板库 向量容器(vector)

    向量容器使用动态数组存储.管理对象.因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素.在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此.然而在数组末端插入元素却很 ...

  4. List接口的实现类(Vector)(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)

      LinkedList提供以下方法:(ArrayList无此类方法) addFirst();    removeFirst();   addLast();   removeLast(); 在堆栈中, ...

  5. R语言编程艺术#01#数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  6. 对ArrayList(Vector)的排序

    当需要对ArrayList(Vector)里面的元素进行简单的排序时,可以使用Collections.sort();这个方法 import java.util.ArrayList; import ja ...

  7. Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动

    如果我们习惯于数学坐标系,那么对于Silverlight中的坐标系可能会有些不习惯.因为在Silverlight中的坐标系与Flash中的坐标系一样,一切都的颠倒的.在标准的数学坐标系中,X轴表示水平 ...

  8. 获取一个数组(vector)与查找值(value)的差最小绝对值的成员索引的算法

    代码如下: 函数作用:传递进来一个数组(vector),和一个需要查找的值(value),返回与value的差值绝对值最小的vector成员索引,若value不在vector范围中,则返回-1: in ...

  9. BFS(二):数的变换

    [例1]整数变换(POJ 3278 “Catch That Cow”) 给定两个整数a和b(0 ≤a,b≤100,000),要求把a变换到b.变换规则为:(1)当前数加1:(2)当前数减1:(3)当前 ...

随机推荐

  1. 洛谷P5279 [ZJOI2019]麻将(乱搞+概率期望)

    题面 传送门 题解 看着题解里一堆巨巨熟练地用着专业用语本萌新表示啥都看不懂啊--顺便\(orz\)余奶奶 我们先考虑给你一堆牌,如何判断能否胡牌 我们按花色大小排序,设\(dp_{0/1,i,j,k ...

  2. python 将列表嵌套字典的unicode字符串转换为str格式的字符串的方法

    今天在进行django开发的过程中遇到了一个非常棘手的问题, 因为需求原因, 需要将一份数据存为json格式到数据库中, 如下面这种格式: list_1 = [{"name":&q ...

  3. jquery源码解析:jQuery队列操作queue方法实现的原理

    我们先来看一下jQuery中有关队列操作的方法集: 从上图可以看出,既有静态方法,又有实例方法.queue方法,相当于数组中的push操作.dequeue相当于数组的shift操作.举个例子: fun ...

  4. 题目1005:Graduate Admission(结构体排序)

    问题来源 http://ac.jobdu.com/problem.php?pid=1005 问题描述 这道题理解题意有些麻烦,多看几遍先理解题意再说.每个学生有自己的三个成绩,一个编号,以及一个志愿列 ...

  5. Mysql备份之Innobakcupex&Xtrabackup

                       一.innobackupex备份工具 基本选项 --compress:该选项表示压缩innodb数据文件的备份. --compress-threads:该选项表示 ...

  6. vue进行路由拼图的使用案例

    实现思路,利用路由进行实现多个组件拼图: Detail.vue <template> <div> <h1>详细展示</h1> <div>鞍山 ...

  7. 使用go写一个简单的exe文件

    工作需要一个小工具给分析师用,原先打算写一个脚本的,但是呢我又不会用python,要写的话只能用java来实现(打包成可执行jar,使用java -jar 的命令来执行,当然得安装jdk).这种命令行 ...

  8. 南昌网络赛 Distance on the tree 主席树+树剖 (给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数。)

    https://nanti.jisuanke.com/t/38229 题目: 给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数. #include <bits/stdc++.h ...

  9. Linux安装phpMywind

    1.安装MySQL http://www.cnblogs.com/wangshuyi/p/6091244.html 2.安装apache.php.及其扩展 yum install -y httpd p ...

  10. HUE配置文件hue.ini 的Spark模块详解(图文详解)(分HA集群和HA集群)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...