hdu 2444 交叉染色判断二分图+二分最大匹配
/*1A 31ms*/
#include<stdio.h>
#include<string.h>
#define N 300
int n;
struct node {
int u,v,next;
}bian[N*N*2];
int color[N],vis[N],link[N],visit[N],ma[N][N],f[N],head[N],yong;
void addedge(int u,int v) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].next=head[u];
head[u]=yong++;
}
void init() {//初始化
memset(ma,0,sizeof(ma));
memset(f,0,sizeof(f));
memset(visit,0,sizeof(visit));
memset(link,-1,sizeof(link));
memset(color,0,sizeof(color));
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
yong=0;
}
int ff(int u) {//二分匹配
int i;
for(i=1;i<=n;i++)
if(visit[i]==0&&ma[u][i]) {
visit[i]=1;
if(link[i]==-1||ff(link[i])) {
link[i]=u;
return 1;
}
}
return 0;
}
int find(int u,int f) {//交叉染色判定
int i;
for(i=head[u];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(f)
ma[u][v]=1;//建立邻接矩阵
else
ma[v][u]=1;
if(!vis[v]) {
color[v]=!color[u];
vis[v]=1;
find(v,f^1);
}
else
if(color[v]==color[u])return 0;
}
return 1;
}
int main() {
int m,i,a,b,ok;
while(scanf("%d%d",&n,&m)!=EOF) {
init();
while(m--) {
scanf("%d%d",&a,&b);
addedge(a,b);
addedge(b,a);
f[a]=f[b]=1;//存在
}
ok=0;
for(i=1;i<=n;i++)
if(!vis[i]&&f[i]) {
color[i]=1;
vis[i]=1;
if(find(i,1)==0)
ok=1;
}
if(ok) {//是否存在不能交叉染色的
printf("No\n");
continue;
}
b=0;
for(i=1;i<=n;i++) {//二分最大匹配
memset(visit,0,sizeof(visit));
b+=ff(i);
}
printf("%d\n",b);
}
return 0;
}
hdu 2444 交叉染色判断二分图+二分最大匹配的更多相关文章
- poj2942(双联通分量,交叉染色判二分图)
题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先 ...
- The Accomodation of Students HDU - 2444(判断二分图 + 二分匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- hdu 2444 The Accomodation of Students 判断二分图+二分匹配
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- hdu 2444 The Accomodation of Students (判断二分图,最大匹配)
The Accomodation of StudentsTime Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- hdu 2444 The Accomodation of Students(二分匹配 匈牙利算法 邻接表实现)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- hdu 1068 Girls and Boys 二分图的最大匹配
题目链接:pid=1068">http://acm.hdu.edu.cn/showproblem.php? pid=1068 #include <iostream> #in ...
- hdu 2063 过山车 (二分图,最大匹配)
过山车Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)
Divide Groups Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu 2444 二分图判断与最大匹配
题意:有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出No ...
随机推荐
- MySQL 相邻两条数据相减
<!-- 计算每两次消费的间隔天数 --> SELECT B.MEN_ID,TIMESTAMPDIFF(DAY,B.PRE_DATE,B.CURR_DATE) AS DAYS FROM ( ...
- 2498 IncDec Sequence
2498 IncDec Sequence 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 给 ...
- bzoj5192: [Usaco2018 Feb]New Barns
不想写看zory大佬 #include<cstdio> #include<iostream> #include<cstring> #include<cstdl ...
- OST
爱情的条件 http://music.163.com/#/album?id=531414 kill me heal me http://music.163.com/#/album?id=3104890
- hdoj--1220--Cube(数学推导)
Cube Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- B1076 [SCOI2008]奖励关 状压dp&&期望dp
这个题的n<15,一看就是状压dp.但是状态不是很好想.f[][]存i关的状态j. 这个题另一个关键思想在于倒推,我一开始想的是正推,但是只能记忆化了. 题干: 题目描述 你正在玩你最喜欢的电子 ...
- DCloud-MUI:下拉刷新、上拉加载
ylbtech-DCloud-MUI:下拉刷新.上拉加载 1. 下拉刷新返回顶部 0. http://dev.dcloud.net.cn/mui/pulldown/ 1. 概述 为实现下拉刷新功能,大 ...
- 444D
分类 首先我们要对询问分类,如果相差log级别就第一种询问,否则第二种. 第一种直接暴力lower_bound,复杂度玄学 第二种归并,复杂度玄学 但是就是过了.感觉很容易卡. #include< ...
- bzoj1895
fhqtreap 其实fhqtreap只有可持久化之后才用新建节点... reverse和splay一样. //#include<bits/stdc++.h> #include<cs ...
- leetcode树相关
目录 144前序遍历 94中序遍历(98验证二叉搜索树.230二叉搜索树中第K小的元素) 145后序遍历 102/107层次遍历(104二叉树最大深度.103 105从前序与中序遍历序列构造二叉树 1 ...