hdoj 3478 Catch(二分图判定+并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478
思路分析:该问题需要求是否存在某一个时刻,thief可能存在图中没一个点;将该问题转换为图论问题即为判断该图是否为一个连通图且不为二分图;
(1)二分图的性质:对于无向图G=(V, E),如果可以将图中的点划分为两个不相交的点集X与Y = V - X(V为点集),使得图中所有的边邻接的两个点分别存在集合X与集合Y中,则称该图G为二分图;
(2) 二分图判定算法:二分图一种判定方法是给图中的每一个点着黑色或者白色,如果图中每条边邻接的两个点的颜色不同,则该图为二分图,所以非联通的图也可以是二分图,即一个无向图是二分图当且仅当其每个联通分量都是二分图;二分图判定算法使用dfs搜索:选定一个起始结点并着以某一种颜色,从该起始结点出发,与其邻接的点如果已经着色并且颜色与该结点相同,则不为二分图,如果与其邻接的点没有着色,则对该点着以不同的颜色,如此处理直到所有的点被着色成功则该结点所在的联通分量为二分图;需要注意的是图中可能有多个联通分量;
代码如下:
#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>
using namespace std; const int MAX_N = + ;
vector<int> G[MAX_N];
int fa[MAX_N], color[MAX_N]; void Init()
{
for (int i = ; i < MAX_N; ++i)
{
fa[i] = i;
G[i].clear( );
}
memset(color, , sizeof(color));
} int Find(int v)
{
if (fa[v] == v)
return v;
else
return fa[v] = Find(fa[v]);
} int Union(int a, int b)
{
int fa_a = Find(a);
int fa_b = Find(b); if (fa_a == fa_b)
return -;
else if (fa_a > fa_b)
fa[fa_b] = fa_a;
else
fa[fa_a] = fa_b;
return ;
} bool BiPartite(int u)
{
for (int i = ; i < G[u].size(); ++i)
{
int v = G[u][i];
if (color[u] == color[v])
return false;
if (!color[v])
{
color[v] = - color[u];
if (!BiPartite(v))
return false;
}
}
return true;
} int main()
{
int test_case, ver_1, ver_2;
int ver_num, road_num, start, case_id = ; scanf("%d", &test_case);
while (test_case--)
{
Init();
scanf("%d %d %d", &ver_num, &road_num, &start);
for (int i = ; i < road_num; ++i)
{
scanf("%d %d", &ver_1, &ver_2);
G[ver_1].push_back(ver_2);
G[ver_2].push_back(ver_1);
Union(ver_1, ver_2);
} int set_count = ;
for (int i = ; i < ver_num; ++i)
{
if (fa[i] == i)
set_count++;
if (set_count > )
break;
}
printf("Case %d: ", ++case_id);
color[start] = ;
if (!BiPartite(start) && set_count == )
printf("YES\n");
else
printf("NO\n");
}
return ;
}
hdoj 3478 Catch(二分图判定+并查集)的更多相关文章
- [NOIP 2010] 关押罪犯 (二分+二分图判定 || 并查集)
		
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
 - HDU 3081 Marriage Match II (二分图,并查集)
		
HDU 3081 Marriage Match II (二分图,并查集) Description Presumably, you all have known the question of stab ...
 - noip 2010 关押罪犯 二分答案+二分图染色 || 并查集
		
题目链接 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值&q ...
 - HDU-3081-Marriage Match II 二分图匹配+并查集  OR  二分+最大流
		
二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...
 - POJ1703Find them, Catch them[种类并查集]
		
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42416 Accepted: ...
 - [BZOJ1854][Scoi2010]游戏(二分图匹配/并查集)
		
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1854 分析:很裸的一道二分图匹配对吧,但是在hzwer的blog上看见神奇的并查集做法 ...
 - BZOJ 1854: [Scoi2010]游戏(二分图匹配/并查集)
		
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1854 题解: 1.二分图匹配: 首先我们发现每件装备只能在两种属性中选一种.因此,我们以每 ...
 - BZOJ4025 二分图     分治 并查集 二分图 带权并查集按秩合并
		
原文链接http://www.cnblogs.com/zhouzhendong/p/8683831.html 题目传送门 - BZOJ4025 题意 有$n$个点,有$m$条边.有$T$个时间段.其中 ...
 - bzoj 1854 游戏 二分图匹配 || 并查集
		
题目链接 Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的 ...
 
随机推荐
- Android应用如何开机自启动、自启动失败原因
			
本文主要介绍Android应用如何开机自启动.自启动失败的原因.adb命令发送BOOT_COMPLETED.问题:应用程序是否可以在安装后自启动,没有ui的纯service应用如何启动?答案马上揭晓^ ...
 - math。h中的log函数的应用
			
以10为底的log函数: 形式为 double log10(double x) 以e为底的log函数(即 ln)double log (double x) 如何表达log 以a为底b的对数: 用换 ...
 - HiveQL与SQL区别
			
转自:http://www.aboutyun.com/thread-7327-1-1.html 1.Hive不支持等值连接 SQL中对两表内联可以写成:select * from dual a,dua ...
 - codeforces 292E. Copying Data   线段树
			
题目链接 给两个长度为n的数组, 两种操作. 第一种, 给出x, y, k, 将a[x, x+k-1]这一段复制到b[y, y+k-1]. 第二种, 给出x, 输出b[x]的值. 线段树区间更新单点查 ...
 - python读取word表格内容(1)
			
1.首页介绍下word表格内容,实例如下: 每两个表格后面是一个合并的单元格
 - Eclipse中搭建Python开发环境
			
转载:http://www.cnblogs.com/realh/archive/2010/10/04/1841907.html Eclipse+PyDev环境搭建 1.准备工作 JDK6 Java 开 ...
 - MySQL zerofill 的用法
			
creata table t(x int(6) zerofill,y int); insert into t(x,y) values(1,1); select x,y from t;
 - JConsole是什么
			
从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JConsole(或者,它更高端的 “ ...
 - MockObject
			
http://www.mockobjects.com/ http://jmock.org/download.html https://jakarta.apache.org/cactus/mock_vs ...
 - UIWindow 详解
			
UIWindow对象是所有UIView的根视图,管理和协调的应用程序的显示.分发事件给View.UIWindow类是UIView的子类,可以看作是特殊的UIView.一般应用程序只有一个UIWindo ...