/*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 交叉染色判断二分图+二分最大匹配的更多相关文章

  1. poj2942(双联通分量,交叉染色判二分图)

    题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先 ...

  2. The Accomodation of Students HDU - 2444(判断二分图 + 二分匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  3. hdu 2444 The Accomodation of Students 判断二分图+二分匹配

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  4. hdu 2444 The Accomodation of Students (判断二分图,最大匹配)

    The Accomodation of StudentsTime Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  5. hdu 2444 The Accomodation of Students(二分匹配 匈牙利算法 邻接表实现)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  6. hdu 1068 Girls and Boys 二分图的最大匹配

    题目链接:pid=1068">http://acm.hdu.edu.cn/showproblem.php? pid=1068 #include <iostream> #in ...

  7. hdu 2063 过山车 (二分图,最大匹配)

    过山车Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)

    Divide Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. hdu 2444 二分图判断与最大匹配

    题意:有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出No ...

随机推荐

  1. C++模板(菜鸟教程)

    C++模板(菜鸟教程) C++ 模板 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都 ...

  2. bzoj1116 [POI2008]CLO——并查集找环

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1116 分析性质,只要有环,那么给环定一下向就满足了条件: 环上点的其他边可以指向外面,所以两 ...

  3. 网上订餐系统的SQL SERVER 2005数据库连接

  4. PCB 周期日历

    在PCB行业一直以来没找到适合我们这行业的日历,主要存在2个差异导致. 1.周期差异:由于PCB 周期计算的复杂性,市面上无法找到符合PCB行业计算周期方式 (另一遍博文中有写周期计算逻辑) http ...

  5. Tunnel Warfare(树状数组+二分)

    http://poj.org/problem?id=2892 题意:输入n,m.n代表数轴的长度,m代表操作数. D x: 摧毁点x Q x: 询问村庄x最左与最右没有被摧毁的点的距离 R  :恢复最 ...

  6. 使用protobuf传递网络消息

    1.获取protobuf及相关依赖 新建install_protobuf.bat脚本,粘贴以下代码 ::参考文章 https://github.com/google/protobuf/blob/mas ...

  7. BZOJ 3876 有上下界的网络流

    思路: 套用有上下界的网络流 就好了   (这算是裸题吧) 比如 有条 x->y 的边  流量上限为R 下限为L 那么du[x]-=L,du[y]+=L 流量上限变成R-L du[x]>0 ...

  8. P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. The cow ...

  9. js---html元素操作

    思路:创给节点添加一个元素:步骤: 1:创建元素节点 2:创建文本节点 3:将该文本添加到元素上 4:将该元素追加到其他元素上 appendChild() 方法,将新元素作为父元素的最后一个子元素进行 ...

  10. 学习廖雪峰的Python教程之数据类型

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...