POJ1274 The Perfect Stall【二部图最大匹配】
2015-10-27 10:08
357 查看
主题链接:
id=1274">http://poj.org/problem?
id=1274
题目大意:
有N头奶牛(编号1~N)和M个牛棚(编号1~M)。
每头牛仅仅可产一次奶。每一个牛棚也仅仅同意一仅仅牛产奶。
如今给出每头奶牛喜欢去的牛棚的编号。问:最多有多少头奶牛能完毕产奶。
思路:
二分图最大匹配问题,建立一个图,用行来表示奶牛,用列来表示牛棚。将奶牛和喜欢去的牛棚编号
连边。
然后用匈牙利算法DFS版或BFS版求二分图的最大匹配数就可以。这里用了匈牙利算法DFS版。
AC代码:
id=1274">http://poj.org/problem?
id=1274
题目大意:
有N头奶牛(编号1~N)和M个牛棚(编号1~M)。
每头牛仅仅可产一次奶。每一个牛棚也仅仅同意一仅仅牛产奶。
如今给出每头奶牛喜欢去的牛棚的编号。问:最多有多少头奶牛能完毕产奶。
思路:
二分图最大匹配问题,建立一个图,用行来表示奶牛,用列来表示牛棚。将奶牛和喜欢去的牛棚编号
连边。
然后用匈牙利算法DFS版或BFS版求二分图的最大匹配数就可以。这里用了匈牙利算法DFS版。
AC代码:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int MAXN = 220; bool Map[MAXN][MAXN]; bool bMask[MAXN]; int NX,NY; int cx[MAXN],cy[MAXN]; int FindPath(int u) { for(int i = 1; i <= NY; ++i) { if(Map[u][i] && !bMask[i]) { bMask[i] = 1; if(cy[i] == -1 || FindPath(cy[i])) { cy[i] = u; cx[u] = i; return 1; } } } return 0; } int MaxMatch() { int res = 0; for(int i = 1; i <= NX; ++i) cx[i] = -1; for(int i = 1; i <= NY; ++i) cy[i] = -1; for(int i = 1; i <= NX; ++i) { if(cx[i] == -1) { for(int j = 1; j <= NY; ++j) bMask[j] = 0; res += FindPath(i); } } return res; } int main() { int d,id; while(~scanf("%d%d",&NX,&NY)) { memset(Map,0,sizeof(Map)); for(int i = 1; i <= NX; ++i) { scanf("%d",&id); for(int j = 1; j <= id; ++j) { scanf("%d",&d); Map[i][d] = 1; } } printf("%d\n",MaxMatch()); } return 0; }
相关文章推荐
- Jetty/Feature/Jetty Maven Plugin
- 了解jQuery
- 新手在js里面看到$符号,很奇怪,啥东西
- ReactJS入门
- 关于reset.css的疑问:为什么一定要重置浏览器样式?
- JSON.parse()和eval()的区别
- html5本次存储几种方式
- 织梦arclist 五条文章,每条显示的CSS样式不一样。实现方式如下。
- 理解JavaScript的作用域链
- node.js(3) 模块加载机制
- JS实现浏览器状态栏文字从右向左弹出效果代码
- jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
- NiftyDialogEffects-多种弹出效果的对话框
- 基于SpringMVC与jquery的ajax提交表单的若干情况详解
- 有关AngularJS请求Web API资源的思路
- 40款 Javascript common plugins
- jQuery停止动画和判断是否处于动画状态
- 解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
- node-webkit-MusicBox 基于nwjs ,html5 ,制作的音乐盒子
- JSON.parse()和JSON.stringify()