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 ...
随机推荐
- mysql性能排查思路
mysql性能瓶颈排查 top/free/vmstat/sar/mpstat 查看mysqld进程的cpu消耗占比 确认mysql进程的cpu消耗是%user, 还是sys%高 确认是否是物理内存 ...
- python爬虫之小说网站--下载小说(正则表达式)
python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...
- 关于java中assert(断言)的使用讲解
说明:写的不是很全面,有任何问题请留言,多交流,谢谢! 1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enabl ...
- Windows10反安装报错error code 2502 2503
先找系统TEMP目录,一般为C:\windows\temp,打开这个目录的权限,为这个目录中的User用户添加权限为完全控制,现在再反安装就不会报错了. 注:原因就是因为系统运行时需要用到临时文件的目 ...
- MySQL高级知识(一)——基础
前言:MySQL高级知识主要来自尚硅谷中MySQL的视频资源.对于网上视频资源来说,尚硅谷是一个非常好的选择.通过对相应部分的学习,笔者可以说收益颇丰,非常感谢尚硅谷. 1.关于MySQL的一些文件 ...
- Google Colab 基本操作
## 上传 from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print('Use ...
- 解决vaio s13笔记本 ubuntu重启卡屏问题
终端 sudo gedit /etc/default/grub 找到GRUB_CMDLINE_LINUX_DEFAULT="quiet splash",添加内核启动参数reboot ...
- centos 6.9修改系统默认字符集
[root@ckh ~]# locale –a #列出系统所支持的所有字符集 aa_DJ aa_DJ.iso88591 aa_DJ.utf8 aa_ER aa_ER@saaho aa_ER.utf8 ...
- docker 5 docker-阿里云加速配置
阿里云加速配置 鉴于国内网络问题,后续拉取docker镜像十分缓慢,我们可以配置加速器来解决. 1.阿里云地址 https://dev.aliyun.com/ 如果你想注册,可以注册个账号. 不想注 ...
- 初学Python——字典
一.定义 什么是字典? 字典是一种数据类型,是一系列数据的组合. 每一个数据单元都分为key和value,key也称主键,具有唯一性,不可重复.value可以理解成是key对应的值. info={ 1 ...