HDU 2444 二分图判断 (BFS染色)+【匈牙利】
<题目链接>
题目大意:
有N个人,M组互相认识关系互相认识的两人分别为a,b,将所有人划分为两组,使同一组内任何两人互不认识,之后将两个组中互相认识的人安排在一个房间,如果出现单人的情况则不安排房间。输出最大需要安排房间的数量。
解题分析:
其实题意就是叫我们先判断该图是否为二分图,如果是的话,给出它的最大匹配。判断是否是二分图,我们可以用BFS或DFS对每个节点进行染色,有直接认识关系的人染成不同颜色,判断再染色的过程中是否发生冲突。最后再用匈牙利求出最大匹配。
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
;
bool g[N][N],vis[N];
int n,m,ans,linker[N];
bool bfs(){ //用bfs染色法判断该图是否是二分图
queue<int>q;
bool tag[N];
memset(vis,false,sizeof(vis));
q.push(); //先从任意一点开始染色
tag[]=vis[]=true;
while(!q.empty()){
int now=q.front();q.pop();
;i<=n;i++){
if(g[now][i]&&i!=now){
if(vis[i]){
if(tag[now]==tag[i])return false; //如果相连的其它节点已经染色,且染的颜色与当前颜色相同,则说明该图不是二分图
}else{
tag[i]=!tag[now]; //相连的节点染不同的颜色
q.push(i);
vis[i]=true;
}
}
}
}
return true;
}
bool dfs(int x){
;i<=n;i++){
if(g[x][i]&&!vis[i]){
vis[i]=true;
if(!linker[i]||dfs(linker[i])){
linker[i]=x;
return true;
}
}
}
return false;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
memset(g,,sizeof(g));
memset(linker,,sizeof(linker));
while(m--){
int u,v;scanf("%d%d",&u,&v);
g[u][v]=true;
}
if(bfs()){ //该图是二分图
ans=;
;i<=n;i++){ //求出该图的最大匹配
memset(vis,,sizeof(vis));
if(dfs(i))ans++;
}
printf("%d\n",ans);
}else puts("No");
}
;
}
2018-11-11
HDU 2444 二分图判断 (BFS染色)+【匈牙利】的更多相关文章
- hdu 2444 二分图判断与最大匹配
题意:有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出No ...
- HDU - 2444 二分图最大匹配 之 判断二分图+匈牙利算法
题意:第一行给出数字n个学生,m条关系,关系表示a与b认识,判断给定数据是否可以构成二分图,如果可以,要两个互相认识的人住一个房间,问最大匹配数(也就是房间需要的最小数量) 思路:要看是否可以构成二分 ...
- hdu 2444(二分图) The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 大意是给定n个学生,他们之间可能互相认识,首先判断能不能将这些学生分为两组,使组内学生不认识: 现想将学生 ...
- The Accomodation of Students HDU - 2444 二分图判定 + 二分图最大匹配 即二分图-安排房间
/*655.二分图-安排房间 (10分)C时间限制:3000 毫秒 | C内存限制:3000 Kb题目内容: 有一群学生,他们之间有的认识有的不认识.现在要求把学生分成2组,其中同一个组的人相互不认 ...
- 【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] #include<iostream> #include<cstdio&g ...
- hdu 2444 The Accomodation of Students(最大匹配 + 二分图判断)
http://acm.hdu.edu.cn/showproblem.php?pid=2444 The Accomodation of Students Time Limit:1000MS Me ...
- HDU 2444 The Accomodation of Students(判断是否可图 + 二分图)
题目大意:有一群人他们有一些关系,比如A认识B, B认识C, 但是这并不意味值A和C认识.现在给你所有互相认识的学生,你的任务是把所有的学生分成两个一组, 住在一个双人房里.相互认识的同学可以住在一个 ...
- HDU 2444 The Accomodation of Students二分图判定和匈牙利算法
本题就是先推断能否够组成二分图,然后用匈牙利算法求出最大匹配. 究竟怎样学习一种新算法呢? 我也不知道什么方法是最佳的了,由于看书本和大牛们写的匈牙利算法具体分析,看了几乎相同两个小时没看懂,最后自己 ...
- HDU 2444:The Accomodation of Students(二分图判定+匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:给出边,判断这个是否是一个二分图,并求最大匹配. 思路:先染色法求出是否是一个二分图,然后再匈牙利求 ...
随机推荐
- 机器学习之SVD分解
一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...
- winform无需安装pdf阅读器打开pdf文件
控件来源:http://www.o2sol.com/pdfview4net/download.htm (使用版本:2016年8月31号更新版) 备份链接: https://pan.baidu.com/ ...
- usrp使用
首先打开linux 输入uhd_find_divice gqrx
- IE11总是有缓存的问题
F12,里面选择网络,始终从服务器刷新..
- redis-4.0.8 配置文件解读
# Redis configuration file example.## Note that in order to read the configuration file, Redis must ...
- Python基础之关于表达式
初识表达式: 优雅.清晰和务实是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新 的列表时可以使用列表解析(List comprehensions)和生成表达式 ...
- 插件使用一颜色选择器---cxColor
cxColor 是一款颜色选择器.这样的插件使用场景不多.可喜的这是国人写的. 官方网站: https://github.com/ciaoca/cxColor 使用方法: 1.引入jquery库 1 ...
- 去掉A标签的点击选中边框
非IE a:focus { outline:none; }
- python网络爬虫day1
python爬虫真的很方便,自己不能忽视的问题就是字符编码的问题,一直想腾出时间来看,一直没有时间.明天开始看吧. 今天是学习python爬虫的第一天,从B站上搜到的,可惜可惜. import req ...
- Summary of continuous function spaces
In general differential calculus, we have learned the definitions of function continuity, such as fu ...