【交叉染色法判断二分图】Claw Decomposition UVA - 11396
题目链接:https://cn.vjudge.net/contest/209473#problem/C
先谈一下二分图相关:
一个图是二分图的充分必要条件:
该图对应无向图的所有回路必定是偶环(构成该环形的边的数量为偶数)。
暂时不证明,后证。
那么怎么判断一个图的回路是奇环还是偶环呢?
交叉染色法。
随机选择一个点,染成红色,把所有跟它相邻的点染成绿色,再由被染色的绿点出发,把相邻的点染成红色……
即对于一个点和他相邻的点(两个点之间有边相连叫做相邻),颜色必定不同,如果相同,那么是奇环。
例如1(红)--2(绿)--3(红)--4(绿)--5(红),颜色是跳跃性相同的,如果是奇环那么一定会出现相邻两点颜色相同的情况。
下面放代码:
bool _dfs(int u){
int v;
for(int i=;i<g[u].size();i++){
v=g[u][i];
if(color[v]==color[u])return false;
else if(!color[v]){
color[v]=color[u]^;
if(!_dfs(v))return false;
}
}
return true;
}
回归题目。
题目大意:给出一个图,这个图上的每个点的度数都为3,判断这个图可不可以拆分成“爪”字形。也就是所有的边都要用上,并且只用一次,点可以无限使用(至少使用一次),把原图拆分成全为
这种样子的子图。(注意是打散之后!只有这一个样子没有其他连边了!!!)
解题思路:
借助了一下别人的智慧orz。对于题目进行分析,我们能够发现每个点只有两种用法:1、一个“爪”的中心点。2、一个“爪”的旁支。两个条件绝对不可能同时满足,(证明:如果该点满足1,那么从这个点出发的三条边就是延伸边,不可能作为辅助边。如果该点满足2,那么从这个点出发的至少有一条边是辅助边,那么剩下的少于三条边不足以支撑这个点变为爪中心。)
有了这个前提,我们就能很容易地想到二分图两个集合的互斥,那么对于每个点,在和他相连的另一个点上连边,判断一下是否构成二分图就可以了。
(为什么能构成二分图就有解?一个点如果被规定为爪中心,那么它在跟它相连的三个点全为旁支的情况下,是一定能成立的。【关键在于度数全为3】;一个点如果被规定为旁支,那么跟它相连的所有点都必定是爪中心,所以它的三条边也能分配完毕。)
坑点:
图可能不连通。
下面放上0msAC代码:
#include<stdio.h>
#include<string.h>
#define MAXN 305 int n,g[MAXN][MAXN],color[MAXN]; bool _dfs(int p,int t){ int i;
color[p]=t;
for(i=;i<=n;i++)
if(g[p][i]){
if(color[i]==t)return false;
if(!color[i])
if(!_dfs(i,t^))return false; }
return true;
} int main(){ int x,y,i;
while(true){
scanf("%d",&n);
if(!n)break;
memset(g,,sizeof(g));
memset(color,,sizeof(color));
while(true){
scanf("%d%d",&x,&y);
if(x+y==)break;
g[x][y]=g[y][x]=true;
}
for(i=;i<=n;i++)
if(!color[i])
if(!_dfs(i,))break;
if(i>n)puts("YES");
else puts("NO");
}
return ;
}
【交叉染色法判断二分图】Claw Decomposition UVA - 11396的更多相关文章
- poj 2942 求点双联通+二分图判断奇偶环+交叉染色法判断二分图
http://blog.csdn.net/lyy289065406/article/details/6756821 http://www.cnblogs.com/wuyiqi/archive/2011 ...
- hdu 2444(染色法判断二分图+最大匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- 染色法判断是否是二分图 hdu2444
用染色法判断二分图是这样进行的,随便选择一个点, 1.把它染成黑色,然后将它相邻的点染成白色,然后入队列 2.出队列,与这个点相邻的点染成相反的颜色 根据二分图的特性,相同集合内的点颜色是相同的,即 ...
- UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)
d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍 ...
- Wrestling Match---hdu5971(2016CCPC大连 染色法判断是否是二分图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5971 题意:有n个人,编号为1-n, 已知X个人是good,Y个人是bad,m场比赛,每场比赛都有一个 ...
- Catch---hdu3478(染色法判断是否含有奇环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意:有n个路口,m条街,一小偷某一时刻从路口 s 开始逃跑,下一时刻都跑沿着街跑到另一路口,问 ...
- AcWing 860. 染色法判定二分图
#include <cstring> #include <iostream> #include <algorithm> using namespace std; , ...
- 【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] #include<iostream> #include<cstdio&g ...
- dfs染色法判定二分图
#include<iostream> #include<cstring> using namespace std; ][],color[],n; int dfs(int x,i ...
随机推荐
- 【CodeForces】576 C. Points on Plane
[题目]C. Points on Plane [题意]给定坐标系中n个点的坐标(范围[0,10^6]),求一种 [ 连边形成链后总长度<=2.5*10^9 ] 的方案.n<=10^6. [ ...
- matlab求逆运算:左除( \ )和右除( / ),inv,pinv
矩阵求逆可以使用左除(\)和右除(/),inv,pinv 首先了解需要求逆的矩阵A是否为奇异方阵 inv 若A为非奇异方阵,则存在逆矩阵,可利用inv求逆: inv(A) pinv 若需要求逆的矩阵A ...
- TCP 传输控制协议(转)
开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...
- 安装JDK环境变量的配置
设置环境变量 在java中需要设置三个环境变量(1.5之后不用再设置classpath了,但是个人强烈建议继续设置以保证向下兼容问题) JDK安装完成之后我们用来设置环境变量:右击”我的电脑“,选择” ...
- 背包DP FOJ 2214
题目:http://acm.fzu.edu.cn/problem.php?pid=2214 (http://www.fjutacm.com/Problem.jsp?pid=2053) 这题看起来是一题 ...
- [Leetcode] Search in Rotated Sorted Array 系列
Search in Rotated Sorted Array 系列题解 题目来源: Search in Rotated Sorted Array Search in Rotated Sorted Ar ...
- Redis—初探Redis
一.什么是Redis? 学习Redis最好的是看官网了,下面是Redis的官网对Redis的介绍 可见,Redis是一个内存存储的数据结构服务器,可以用作数据库.缓存等.支持的数据结构也很丰富,有字符 ...
- 017 CPU冲高定位方法
1.通过top命令查看cpu占用高的进程ID; 2.通过top -Hp 进程ID 查看该进程下所有线程占用cpu的情况,拿出占用cpu最高的线程ID,换算成十六进制; 3.通过 jstack 进程ID ...
- WebAPI使用Swagger生成接口文档
开发工具:VS2017 版本15.7.1 新建项目,选择空模板,下面只勾选WebAPI 配置Web.config <system.webServer> 节点改为 <system.we ...
- GPS位置模拟-安卓
测试定位功能时都需要位置模拟,一般有如下3种方式: a)手机上安装第三方模拟软件:需要Root: b)PC模拟其中运行app并模拟位置:不能在真机上运行,手机兼容性不能测试到: b)在app中让开发增 ...