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. 32位Oracle10g在64位CentOS下安装失败记录

    环境信息:Alibaba Cloud Elastic Compute Service,CentOS Linux release 7.4.1708 (Core),16C/64GB. 使用32位Oracl ...

  2. Matlab实现Butterworth滤波器 分类: 图像处理 2014-06-02 00:05 527人阅读 评论(0) 收藏

    下面是用Matlab实现的Butterworth高通.低通滤波器. clc;clear all;close all; I=imread('cameraman.tif'); subplot(3,2,1) ...

  3. js拿到焦点所在的标签对象

    通过 document.activeElement 此时是js对象,如果要调用jQuery的API那么就转换成jquery对象 $(document.activeElement)

  4. JDK集合框架--ArrayList

    ArrayList,从类名就可以看出来,这是由数组实现的List,即内部是用数组保存元素的有序集合.先看看主要的成员变量,比较简单: public class ArrayList<E> e ...

  5. Java核心技术梳理-异常处理

    一.引言 异常总是不可避免的,就算我们自身的代码足够优秀,但却不能保证用户都按照我们想法进行输入,就算用户按照我们的想法进行输入,我们也不能保证操作系统稳定,另外还有网络环境等,不可控因素太多,异常也 ...

  6. CF949A/950C Zebras

    思路: 贪心乱搞. 实现: #include <bits/stdc++.h> using namespace std; vector<vector<int>> v; ...

  7. hihocoder offer收割编程练习赛11 A hiho字符串

    思路: 我用的尺取. 注意题目描述为恰好2个'h',1个'i',1个'o'. 实现: #include <iostream> #include <cstdio> #includ ...

  8. Proc datasets

    作用:控制数据集.Datasets 过程运行结果不输出,结果只有在日志里才能看到. 基本语法: proc datasets lib=work; quit; 用法: 1. 更改数据集 proc data ...

  9. JSP的有哪些内置对象,作用分别是什么?

    request:表示HttpServletRequest对象,它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header和session数据的有用方法: response:表示Ht ...

  10. MySQL_将ubuntu18.04上的数据库导出并导入windows10下

    1.使用:mysqldump -uroot -p databasename>filename.sql databasename:要导出的数据库名. filename:指定导出sql文件的文件名. ...