链接

[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. sqlServer 获取最新的一条数据

    SQL语句获取最新一条的数据 * from tra.dbo.订单 order by 下单时间 desc --时间倒序排列取第一条 select * from tra.dbo.订单 where 下单时间 ...

  2. SqlServer跨集群升级

    SqlServer跨集群升级 1.新Server的IP要和旧的在同一网段. 2.安装SQL SERVER(注意:排序要和以前的一样,更改TempDB位置) 3.开启防火墙,并打开1433和5022端口 ...

  3. c/c++求解图的关键路径 critical path

    c/c++求解图的关键路径 critical path 上图表示一个工程,工程以V1为起始子工程,V9为终止子工程. 由图可以看出,要开工V5工程,必须在完成工程V2和V3后才可以. 完成V2需要a1 ...

  4. python之bytes和string

    转自:https://www.cnblogs.com/skiler/p/6687337.html 1.bytes主要是给在计算机看的,string主要是给人看的 2.中间有个桥梁就是编码规则,现在大趋 ...

  5. IPerf——网络测试工具介绍与源码解析(3)

    [线程的生成]   生成线程时需要传入一个thread_Settings类型的变量,thread_Settings包含所有线程运行时需要的信息,命令行选项参数解析后所有得到的属性都存储到该类型的变量中 ...

  6. 【PAT】B1005 继续(3n+1)猜想

    没有婼姐写得好 将所有的输入放入mp,mp2 覆盖的数存入mp 一开始认为mp中只出现一次的元素就是,忘了可能只被覆盖一次的情况 所以添加了mp2保存输入 #include <iostream& ...

  7. Linux 小知识翻译 - 「DNS服务器」

    这次聊聊「DNS服务器」. DNS(Domain Name System)服务器,也被称为域名服务器. 因为使用互联网的时候,必须要指定DNS服务器,所以你一定听过DNS这个名字吧. 那么,这个DNS ...

  8. CSS多行文本垂直居中

    今天需要将文本垂直居中,就是一行是垂直居中,多行也是垂直居中. 效果如下 实现代码(同事提供) <!DOCTYPE html> <html> <head lang=&qu ...

  9. 更高的压缩比,更好的性能–使用ORC文件格式优化Hive

    http://lxw1234.com/archives/2016/04/630.htm 关键字:orc.index.hive Hive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列 ...

  10. Eclipse debug 断点不能调试 ,Eclipse Unable to install breakpoint in 解决办法

    解决:[1]项目工程名 ,右键 --> properties --> java compiler -->class file Generation 位置  Add line numb ...