链接

[https://vjudge.net/contest/281085#problem/C]

题意

一个n个点,m条边的图,开始的点是s

每次必须移动到相邻的位置,问你是否存在某个时刻所有点都可能到达

分析

图的话用邻接表vectorc存,这个非常实用

首先,如果一个图不是联通的话就不可能存在

其次,如果一个图是二分图的话就不可能存在,因为二分图某一时刻只能在两个点集之一

画图就知道了,其他绝对是可以的,自己画图就会发现了,我也是看了别人的才知道这个套路

经验收获啊!

1.并查集判断是否联通

2.二分图染色,每次把相邻的染为相反颜色,判断是否有矛盾(相邻两个点颜色相同)。

代码

#include<iostream>
#include<string.h>
#include<cstdio>
#include<vector>
using namespace std;
const int N=1e5+10;
int t,n,m,s;
int f[N],col[N];
vector<int> ve[N];
int find(int x){
if(f[x]==-1)
return x;
return f[x]=find(f[x]);
}
bool ok(int u){
for(int i=0;i<ve[u].size();i++){
int v=ve[u][i];
if(col[u]==col[v]) return false;
if(col[v]==0){
col[v]=3-col[u];
if(!ok(v)) return false;
}
}
return true;
}
int main(){
//freopen("in.txt","r",stdin);
scanf("%d",&t);
int kase=0;
while(t--){
scanf("%d%d%d",&n,&m,&s);
for(int i=0;i<n;i++)
ve[i].clear();
memset(col,0,sizeof(col));
memset(f,-1,sizeof(f));
int a,b;
for(int i=0;i<m;i++){
scanf("%d%d",&a,&b);
int f1=find(a);
int f2=find(b);
if(f1!=f2)
f[f2]=f1;
ve[a].push_back(b);
ve[b].push_back(a);
}
int cnt=0;
for(int i=0;i<n;i++)
if(find(i)==i) cnt++;
if(cnt>1){//不连通
printf("Case %d: NO\n",++kase);
continue;
}
col[s]=1;
bool flag=ok(s);
if(flag){
printf("Case %d: NO\n",++kase);
}
else printf("Case %d: YES\n",++kase);
}
return 0;
}

HDU 3478 Catch (连通性&&二分图判断)的更多相关文章

  1. HDU - 3478 Catch(判奇环/二分图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意 给一个无向图和小偷的起点,小偷每秒可以向相邻的点出发,问有没有一个时间点小偷可能出现在任何点. 分析 ...

  2. hdu 3478 Catch 二分图染色

    题目链接 题意 小偷逃跑,从某个点出发,每下一个时刻能够跑到与当前点相邻的点. 问是否存在某一个时刻,小偷可能在图中的任意一个点出现. 思路 结论 如果该图为连通图且不为二分图,则可能,否则不可能. ...

  3. hdu 3478 Catch(染色 dfs 或 bfs )

    Problem Description A thief is running away! We can consider the city to N–. The tricky thief starts ...

  4. hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. HDU 2717 Catch That Cow --- BFS

    HDU 2717 题目大意:在x坐标上,农夫在n,牛在k.农夫每次可以移动到n-1, n+1, n*2的点.求最少到达k的步数. 思路:从起点开始,分别按x-1,x+1,2*x三个方向进行BFS,最先 ...

  6. hdoj 3478 Catch(二分图判定+并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 思路分析:该问题需要求是否存在某一个时刻,thief可能存在图中没一个点:将该问题转换为图论问题 ...

  7. hdu 4751 2013南京赛区网络赛 二分图判断 **

    和以前做过的一个二分图颇为相似,以前的是互相不认识的放在一组,这个是互相认识的,本质上是相同的 是 hdu 2444 #include<cstdio> #include<iostre ...

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

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 The Accomodation of Students Time Limit:1000MS     Me ...

  9. HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...

随机推荐

  1. xtrabackup部署以及使用

    简介 备份mysql数据库一直是一个比较恶心的工作,主要就是备份的数据库比较大实在是慢.最近开始使用xtrabackup来备份数据库,速度上快了很多,尤其还原速度要快的多.下面我将从安装开始简要介绍一 ...

  2. Django基础笔记

    1.准备工作 .虚拟环境设置 python3 pip install virtualenv python -m venv env(虚拟环境文件名) env\Scripts\activate pip i ...

  3. SAP LOGON 快捷登陆方式如何保存密码

    默认情况下,快捷方式密码是不能输入的. 解决方法:修改注册表: 计算机\HKEY_CURRENT_USER\Software\SAP\SAPShortcut\Security EnablePasswo ...

  4. 7个小技巧,解决eclipse卡顿问题

    eclipse作为开发工具,每天都要使用,你肯定遇到过eclipse卡到想哭的时刻,严重影响开发效率啊!如果内存条不要钱,那就加内存吧!一个不够加两个!当然这都是玩笑话,如果不花钱也能解决问题,希望下 ...

  5. February 17th, 2018 Week 7th Saturday

    The happiest part of a man's life is what he passes lying awake in bed in the morning. 人生一大乐事莫过去早上醒来 ...

  6. Ubuntu 12.04上安装 MongoDB并运行

    Ubuntu 12.04上安装 MongoDB并运行 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在Terminal输入 sudo apt-key ...

  7. Fetch请求后台的数据

    <style> #btn{ width: 50px; height: 50px; background-color: red; } #output{ width: 100px; heigh ...

  8. eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)

    eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一) 本篇博客主要包含五个内容: 1.CXF换将搭建以及eclipse配置CXF. 2.eclipse创建w ...

  9. Windows下mysql服务的安装与卸载

    安装 mysqld -install 也可以指定mysql安装服务的文件 my.ini文件配置好后就可以在cmd中安装mysqld服务了,在cmd中运行命令:mysqld --install MySQ ...

  10. Django admin注册model究竟要怎么写才优雅

    比如在Django admin 注册models时,会用到. 对于APP里自带的models,可以使用这种方式注册. from django.contrib import admin # Regist ...