hdu 2444(二分图的判断以及求最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444思路:首先要判断能否构成二分图,用bfs对当前点u染色,对u的邻接点v的颜色进行判断,如果为染色,则染色后入队列,否则,判断color[v]==color[u],如果相等,说明无法构成二部图 ,直接返回false即可。最后就是简单的匈牙利直接求最大匹配就可以了,不过这儿是无向图,最后要除以2。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 #include<vector> 7 using namespace std; 8 #define MAXN 222 9 vector<int>vet[MAXN]; 10 int color[MAXN]; 11 bool mark[MAXN]; 12 int match[MAXN]; 13 int n,m; 14 15 bool bfs(){ 16 queue<int>Q; 17 Q.push(1);mark[1]=true; 18 while(!Q.empty()){ 19 int u=Q.front(); 20 Q.pop(); 21 int c=color[u]; 22 for(int i=0;i<vet[u].size();i++){ 23 int v=vet[u][i]; 24 if(!mark[v]){ mark[v]=true;color[v]=-c;Q.push(v); } 25 else if(color[v]==c)return false; 26 } 27 } 28 return true; 29 } 30 31 bool dfs(int u){ 32 for(int i=0;i<vet[u].size();i++){ 33 int v=vet[u][i]; 34 if(!mark[v]){ 35 mark[v]=true; 36 if(match[v]==-1||dfs(match[v])){ 37 match[v]=u; 38 return true; 39 } 40 } 41 } 42 return false; 43 } 44 45 46 int MaxMatch(){ 47 int res=0; 48 memset(match,-1,sizeof(match)); 49 for(int i=1;i<=n;i++){ 50 memset(mark,false,sizeof(mark)); 51 res+=dfs(i); 52 } 53 return res; 54 } 55 56 57 int main(){ 58 // freopen("1.txt","r",stdin); 59 int u,v; 60 while(~scanf("%d%d",&n,&m)){ 61 for(int i=1;i<=n;i++)vet[i].clear(); 62 for(int i=1;i<=m;i++){ 63 scanf("%d%d",&u,&v); 64 vet[u].push_back(v); 65 vet[v].push_back(u); 66 } 67 memset(color,-1,sizeof(color)); 68 memset(mark,false,sizeof(mark)); 69 if(!bfs()){ puts("No");continue; } 70 int ans=MaxMatch(); 71 printf("%d\n",ans/2); 72 } 73 return 0; 74 }
View Code
转载于:https://www.cnblogs.com/wally/archive/2013/06/03/3116104.html
hdu 2444(二分图的判断以及求最大匹配)相关推荐
- HDU - 2444 The Accomodation of Students(二分图判断+二分图最大匹配)
题目链接:点击查看 题目大意:给出n个学生,他们之间有m个认识关系,但认识关系不具有传递性,比如A认识B,B认识C,A不一定认识C,现在给出认识关系,先判断是否能够将所有学生分为两个集合A和B中去,集 ...
- HDU 2444:The Accomodation of Students(二分图判定+匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:给出边,判断这个是否是一个二分图,并求最大匹配. 思路:先染色法求出是否是一个二分图,然后再匈牙利求 ...
- HDU 2444 The Accomodation of Students 二分图匹配
HDU 2444 The Accomodation of Students 二分图匹配 题目来源: HDU 题意: 给出学生数n和关系数m,接下来给出m个关系. 要求将学生分成两部分,每一部分不能有互 ...
- hdu 4160 Dolls 匈牙利算法求最大匹配
Dolls Time Limit: 2000 ...
- 二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配
二分图匹配 二分图大讲堂--彻底搞定最大匹配数(最小覆盖数).最大独立数.最小路径覆盖.带权最优匹配(转) 文本内容框架: §1图论点.边集和二分图的相关概念和性质 §2二分图最大匹配求解 匈牙利算法 ...
- 蓝桥杯JAVA-22.二分图的判断及其最大匹配模板(JAVA实现)
个人博客 www.tothefor.com 蓝桥杯复习知识点汇总 纸上得来终觉浅,绝知此事要躬行.路漫漫其修远兮,吾将上下而求索!知识是经过历史的巨人沉淀下来的,别总想着自己能够快速学会,多花点时间去 ...
- HDU 2444 The Accomodation of Students (二部图+染色)
The Accomodation of Students Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Ja ...
- HDU 1533 二分图最小权匹配 Going Home
带权二分图匹配,把距离当做权值,因为是最小匹配,所以把距离的相反数当做权值求最大匹配. 最后再把答案取一下反即可. 1 #include <iostream> 2 #include < ...
- 判断并求出两个圆的交点(平面几何)
参考Knut Andreas Lie的Unstructured PEBI-grids Adapting to Geological Features in Subsurface Reservoirs这 ...
最新文章
- 关于hbase的read操作的深入研究 region到storefile过程
- 数据挖掘应用的一些场景和对应算法
- hadoop学习3 查找块的位置
- uip UDPclient模式通信移植,当地port随机
- OJ1025: 最大字符
- Go的nil切片与空切片一样吗?这么答,面试官让回去等信儿
- linux mariadb忘记密码,忘记MySQL/MariaDB root密码的解决方法
- python练习题及答案-python装饰器练习题及答案
- 阿里实人认证android,Android客户端接入
- Response.Redirect导致session丢失的解决办法
- SAP GUI 安全性 下载文件
- 怎样将自己学到的东西发布到博客
- js 实现新年倒计时 定时器使用
- iOS CMMotionManager之加速计、陀螺仪
- 基于MATLAB视频的人体姿态检测
- Solr高级查询Facet
- 电子合同是什么意思,电子合同怎么签才有效?
- [进阶]-多线程、多进程、异步IO实用例子
- SQL必知必会(一)SQL基础篇
- 鸟哥的linux私房菜内容,《鸟哥的Linux私房菜》读书笔记
热门文章
- C语言 | 内部与外部函数
- C语言 | 循环语句总结
- ar面部识别_国内手机厂商AR布局报告
- wincc历史数据库_WinCC系统的基本功能介绍——自动化工程师必备
- 想要导航提示直接进入_北斗导航已开始提供全球服务,你的手机怎样连接北斗?...
- 【渝粤教育】国家开放大学2018年春季 0579-22T电路及磁路(2)(一) 参考试题
- 【渝粤题库】广东开放大学 C语言程序设计 形成性考核
- 亿佰特物联网通信-智慧城市的未来城市愿景
- kafka metric java,jmx_exporter+prometheus+grafana实现kafka metric监控
- centos编译mysql5.6_centos7上编译安装mysql5.6