HDU 3478 Catch (连通性&&二分图判断)
链接
[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 (连通性&&二分图判断)的更多相关文章
- HDU - 3478 Catch(判奇环/二分图)
http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意 给一个无向图和小偷的起点,小偷每秒可以向相邻的点出发,问有没有一个时间点小偷可能出现在任何点. 分析 ...
- hdu 3478 Catch 二分图染色
题目链接 题意 小偷逃跑,从某个点出发,每下一个时刻能够跑到与当前点相邻的点. 问是否存在某一个时刻,小偷可能在图中的任意一个点出现. 思路 结论 如果该图为连通图且不为二分图,则可能,否则不可能. ...
- hdu 3478 Catch(染色 dfs 或 bfs )
Problem Description A thief is running away! We can consider the city to N–. The tricky thief starts ...
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- 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,最先 ...
- hdoj 3478 Catch(二分图判定+并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 思路分析:该问题需要求是否存在某一个时刻,thief可能存在图中没一个点:将该问题转换为图论问题 ...
- hdu 4751 2013南京赛区网络赛 二分图判断 **
和以前做过的一个二分图颇为相似,以前的是互相不认识的放在一组,这个是互相认识的,本质上是相同的 是 hdu 2444 #include<cstdio> #include<iostre ...
- hdu 2444 The Accomodation of Students(最大匹配 + 二分图判断)
http://acm.hdu.edu.cn/showproblem.php?pid=2444 The Accomodation of Students Time Limit:1000MS Me ...
- HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...
随机推荐
- 原生js :removeClass和addClass
function removeClass(obj, aClass) { var re = new RegExp('\\b' + aClass + '\\b'); if (obj.className ! ...
- sql-server的添加数据库文件(日志数据)以及收缩数据库文件(日志数据)
环境: SSMS sql-server2016 一.为数据库添加数据文件 添加日志数据文件 以下是添加数据文件和日志文件的代码 ALTER DATABASE [joinbest] ADD FILE ( ...
- 纯JS编写打地鼠游戏
这个游戏是本人前不久刚入门编写的游戏,感觉里面代码很LOW但是对于新手来说很一般般吧~ 没有上传音乐文件了 运行效果: 上代码(HTML+JS): <!DOCTYPE html> < ...
- ES5-ES6-ES7_对象的扩展
简化的对象写法 省略同名的属性值,省略方法的function let x = 1; let y = 2; let point = { x, y, setX (x) { this.x = x } }; ...
- ES5-ES6-ES7_字符串与JOSN格式的数据相互转换以及深度克隆新对象
这篇文章主要来讲HTML5中的新方法:parse()把字符串转换成josn格式的数据和stringify()把josn格式的数据转换成字符串 eval()方法的回顾 eval()方法可以将任何字符串解 ...
- 【ZJOI2016】线段树
[ZJOI2016]线段树 ZJOI的题神啊. 我们考虑计算每个位置\(p\),它在操作过后变成第\(x\)个数的操作序列数. 我们枚举\(x\).我们先得到了\(L_x,R_x\)表示最左边比\(x ...
- 6.02-news_re
import re import requests url = 'http://news.baidu.com/' headers = { "User-Agent": 'Mozill ...
- sqlserver 2000数据压缩解决方法
--sqlserver 2000数据压缩解决方法. /************************************************************************* ...
- UVA1354-Mobile Computing(二进制枚举子集)
Problem UVA1354-Mobile Computing Accept:267 Submit:2232 Time Limit: 3000 mSec Problem Description ...
- 经典Python进阶文档 真的很棒
https://docs.pythontab.com/interpy/args_kwargs/README/