链接

[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. 原生js :removeClass和addClass

    function removeClass(obj, aClass) { var re = new RegExp('\\b' + aClass + '\\b'); if (obj.className ! ...

  2. sql-server的添加数据库文件(日志数据)以及收缩数据库文件(日志数据)

    环境: SSMS sql-server2016 一.为数据库添加数据文件 添加日志数据文件 以下是添加数据文件和日志文件的代码 ALTER DATABASE [joinbest] ADD FILE ( ...

  3. 纯JS编写打地鼠游戏

    这个游戏是本人前不久刚入门编写的游戏,感觉里面代码很LOW但是对于新手来说很一般般吧~ 没有上传音乐文件了 运行效果: 上代码(HTML+JS): <!DOCTYPE html> < ...

  4. ES5-ES6-ES7_对象的扩展

    简化的对象写法 省略同名的属性值,省略方法的function let x = 1; let y = 2; let point = { x, y, setX (x) { this.x = x } }; ...

  5. ES5-ES6-ES7_字符串与JOSN格式的数据相互转换以及深度克隆新对象

    这篇文章主要来讲HTML5中的新方法:parse()把字符串转换成josn格式的数据和stringify()把josn格式的数据转换成字符串 eval()方法的回顾 eval()方法可以将任何字符串解 ...

  6. 【ZJOI2016】线段树

    [ZJOI2016]线段树 ZJOI的题神啊. 我们考虑计算每个位置\(p\),它在操作过后变成第\(x\)个数的操作序列数. 我们枚举\(x\).我们先得到了\(L_x,R_x\)表示最左边比\(x ...

  7. 6.02-news_re

    import re import requests url = 'http://news.baidu.com/' headers = { "User-Agent": 'Mozill ...

  8. sqlserver 2000数据压缩解决方法

    --sqlserver 2000数据压缩解决方法. /************************************************************************* ...

  9. UVA1354-Mobile Computing(二进制枚举子集)

    Problem UVA1354-Mobile Computing Accept:267  Submit:2232 Time Limit: 3000 mSec  Problem Description ...

  10. 经典Python进阶文档 真的很棒

    https://docs.pythontab.com/interpy/args_kwargs/README/