hdu2444 The Accomodation of Students(推断二分匹配+最大匹配)
//推断是否为二分图:在无向图G中,假设存在奇数回路,则不是二分图。否则是二分图。
//推断回路奇偶性:把相邻两点染成黑白两色。假设相邻两点出现颜色同样则存在奇数回路。 也就是非二分图。
# include <stdio.h>
# include <string.h>
# include <algorithm>
using namespace std;
int vis[210],map[210][210],cott[210];
int c[210];
int flag,n,m;
void dfs(int i,int color)//染色法推断是否是二分图
{
for(int j=1; j<=n; j++)
{
if(map[i][j])
{
if(c[j]==0)
{
c[j]=-color;
dfs(j,-color);
}
else if(c[j]==color)
{
flag=false;
return ;
}
if(!flag)
return ;
}
}
}
int check()
{
flag=1;
memset(c,0,sizeof(c));
c[1]=1;//一号为黑色,与他相邻的都染为白色
dfs(1,1);//从一号開始
return flag;
} int bfs(int x)
{
for(int i=1; i<=n; i++)
{
if(!vis[i]&&map[x][i])
{
vis[i]=1;
if(!cott[i]|bfs(cott[i]))
{
cott[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int a,b;
while(~scanf("%d%d",&n,&m))
{
memset(map,0,sizeof(map));
for(int i=0; i<m; i++)
{
scanf("%d%d",&a,&b);
map[b][a]=map[a][b]=1;
}
if(!check())
{
printf("No\n");
}
else
{
int cot=0;
memset(cott,0,sizeof(cott));
for(int i=1; i<=n; i++)//以x集合为准找了一遍。又以y集合为准找了一遍。匹配数量增倍
{
memset(vis,0,sizeof(vis));
if(bfs(i))
cot++;
}
printf("%d\n",cot/2); } }
return 0;
}
hdu2444 The Accomodation of Students(推断二分匹配+最大匹配)的更多相关文章
- HDU2444 The Accomodation of Students —— 二分图最大匹配
题目链接:https://vjudge.net/problem/HDU-2444 The Accomodation of Students Time Limit: 5000/1000 MS (Java ...
- HDU2444 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 【二分图匹配】
There are a group of students. Some of them may know each other, while others don't. For example, A ...
- HDU2444 The Accomodation of Students【匈牙利算法】
题意: 有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出N ...
- HDU2444 The Accomodation of Students(二分图最大匹配)
有n个关系,他们之间某些人相互认识.这样的人有m对.你需要把人分成2组,使得每组人内部之间是相互不认识的.如果可以,就可以安排他们住宿了.安排住宿时,住在一个房间的两个人应该相互认识.最多的能有多少个 ...
- HUD 2444 The Accomodation of Students (二分图染色+最大匹配)
#include<iostream> #include<cstdio> #include<cstring> #define maxn 2010 using name ...
- B - The Accomodation of Students - hdu 2444(最大匹配)
题意:现在有一些学生给你一下朋友关系(不遵守朋友的朋友也是朋友),先确认能不能把这些人分成两组(组内的人要相互不认识),不能分的话输出No(小写的‘o’ - -,写成了大写的WA一次),能分的话,在求 ...
- HDU 2444 The Accomodation of Students(二分图判定+最大匹配)
这是一个基础的二分图,题意比较好理解,给出n个人,其中有m对互不了解的人,先让我们判断能不能把这n对分成两部分,这就用到的二分图的判断方法了,二分图是没有由奇数条边构成环的图,这里用bfs染色法就可以 ...
随机推荐
- 【BZOJ 2671】 2671: Calc (数论,莫比乌斯反演)
2671: Calc Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 303 Solved: 157 Description 给出N,统计满足下面条件 ...
- 范浩强treap 普通平衡树
增加Split(分裂),Merge(合并)操作,非常好写,时间也不比普通treap慢什么. #include<bits/stdc++.h> using namespace std; str ...
- bzoj 3685: 普通van Emde Boas树
3685: 普通van Emde Boas树 Description 设计数据结构支持:1 x 若x不存在,插入x2 x 若x存在,删除x3 输出当前最小值,若不存在输出-14 输出当 ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- java中重载(overload)与重写(override)的区别
方法重载(overload): 方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同的定义,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就 ...
- [转]Android开发过程中遇到的问题
例1: ‘Can't bind to local 8700 for debugger’报错和解决 1.CTS测试出现,运行startcts后,‘Can't bind to local 8700 ...
- Using an open debug interconnect model to simplify embedded systems design
Using an open debug interconnect model to simplify embedded systems design Tom Cunningham, Freescale ...
- Surface Mount Package Details
http://www.centralsemi.com/product/packages/index2.php http://www.infineon.com/cms/cn/product/packag ...
- Linux X86-64 进程内存空间布局
http://blog.csdn.net/woshinia/article/details/41722085 http://www.lenky.info/archives/2012/04/1424 h ...
- ORACLE单表理论最大记录数
不考虑硬件诸如内存,存储等硬件的限制. 一张表理论能存储多少条记录呢? 假设: 一个tablespace中包含1022个datafiles, 单个datafiles的最大是32G 假设每个block是 ...