https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/C

【题意】

  • 给定一个无向图,给定小偷的起始位置
  • 从这个起始位置开始,小偷可以在单位时间内逃到相邻的点
  • 问是否存在某一时刻,小偷可能到达这个无向图的任意点

【思路】

  • 首先这个无向图必须是连通的
  • 如果小偷能够在某一奇数步到达某一点,那么他可以在任意奇数步到达这一点;偶数步同理
  • 如果这个图是一个二分图(即奇数步到达的点在一个集合,偶数步到达的点在一个集合),那么对于任意时刻(不是奇数步就是偶数步),小偷不可能到达这个图的任意点(只能是所有的奇数点或偶数点)
  • 如果这个图不是二分图(等价于图中存在一个奇环),则我们可以找到一个点可以在奇数步到达,也可以在偶数步到达;进一步,以这个点为出发点,其他的所有点也都可以染相反的颜色。即只要图中有一个奇环,这个图的任意点就是可以是0,也可以是1。
  • 某一时刻,小偷可能到达这个无向图的任意点等价于这个图连通且不是二分图。

【Accepted】

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=1e5+;
const int maxm=5e5+;
int n,m,s;
struct edge
{
int to;
int nxt;
}e[maxm];
int tot;
int head[maxn];
int col[maxn];
bool vis[maxn];
void init()
{
tot=;
memset(head,-,sizeof(head));
memset(vis,false,sizeof(vis));
memset(col,,sizeof(col));
}
void add(int u,int v)
{
e[tot].to=v;
e[tot].nxt=head[u];
head[u]=tot++;
} bool BFS(int u)
{
int cnt=;
queue<int> Q;
Q.push(u);
vis[u]=true;
cnt++;
while(!Q.empty())
{
u=Q.front();
Q.pop();
for(int i=head[u];i!=-;i=e[i].nxt)
{
int v=e[i].to;
if(!vis[v])
{
vis[v]=true;
cnt++;
Q.push(v);
}
}
}
if(cnt==n)
{
return true;
}
else
{
return false;
}
}
bool Color(int u)
{
queue<int> Q;
Q.push(s);
while(!Q.empty())
{
u=Q.front();
Q.pop();
for(int i=head[u];i!=-;i=e[i].nxt)
{
int v=e[i].to;
if(!col[v])
{
col[v]=!col[u];
Q.push(v);
}
else if(col[v]==col[u])
{
return false;
}
}
}
return true;
}
int main()
{
int cas=;
int T;
scanf("%d",&T);
while(T--)
{
init();
scanf("%d%d%d",&n,&m,&s);
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
if(BFS(s)&&!Color(s))
{
printf("Case %d: YES\n",++cas);
}
else
{
printf("Case %d: NO\n",++cas);
}
}
return ;
}

【判断二分图】C. Catch的更多相关文章

  1. HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)

    Divide Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. Java实现 LeetCode 785 判断二分图(分析题)

    785. 判断二分图 给定一个无向图graph,当这个图为二分图时返回true. 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我 ...

  3. (hdu)2444 The Accomodation of Students 判断二分图+最大匹配数

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Problem Description There are a group of s ...

  4. The Accomodation of Students(判断二分图以及求二分图最大匹配)

    The Accomodation of Students Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a ...

  5. 二分图学习——基础dfs判断二分图

    #include <iostream> #include <cstdio> #include <string.h> #include <vector> ...

  6. The Accomodation of Students HDU - 2444(判断二分图 + 二分匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  7. 【交叉染色法判断二分图】Claw Decomposition UVA - 11396

    题目链接:https://cn.vjudge.net/contest/209473#problem/C 先谈一下二分图相关: 一个图是二分图的充分必要条件: 该图对应无向图的所有回路必定是偶环(构成该 ...

  8. hdu 2444(染色法判断二分图+最大匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  9. UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)

    d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍 ...

随机推荐

  1. Java中的流(3)字符流-Reader和Writer

    java中提供了处理以16位的Unicode码表示的字符流的类,即以Reader和Writer 为基类派生出的一系列类.  1.Reader和Writer  这两个类是抽象类,只是提供了一系列用于字符 ...

  2. 455 Assign Cookies 分发饼干

    假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 j ,都有一个尺寸 ...

  3. JDK常用类解读--StringBuffer、StringBuilder

    上一篇博客讲到String对象一旦被创建该内容就不能被修改了如: String s = "hello world"; s.substring(6); s.replace(" ...

  4. SpringMvc如何将Url 映射到 RequestMapping (二)

    昨天简单分析了Springmvc 中 RequestMapping 配置的url和请求url之间的匹配规则.今天详细的跟踪一下一个请求url如何映射到Controller的对应方法上 一.入口 org ...

  5. 移动设备访问使用百度js跳转

    以下为代码,可放置在网站foot底部文件,或者haead顶部文件,建议将代码放在网站顶部,这样可以实现手机访问立即跳转! <script src="http://siteapp.bai ...

  6. 以JSONobject形式提交http请求

    总结一下设置图标的三种方式: (1)button属性:主要用于图标大小要求不高,间隔要求也不高的场合. (2)background属性:主要用于能够以较大空间显示图标的场合. (3)drawableL ...

  7. H5 canvas 直线和三角形

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. CE工具里自带的学习工具--第一关

    点击[下一步],进入第二关

  9. h5编写帧动画

    var requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame; var ...

  10. 除了上万的月薪之外,还有什么理由让我们必须学Python?

    虽然目前的编程语言有很多,但是基础语法上的概念,本质上都是相通的.可以做到一通百通.所以没有必要为了学哪门语言纠结太多. python是目前市面上,我个人认为是最简洁&&最优雅& ...