二分图多重匹配问题
2015-07-21 20:21
120 查看
二分图多重匹配问题 #include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; const int maxn = 100005; const int maxm = 15; int cap[maxm]; int Link[maxm][maxn]; int vLink[maxm]; int mat[maxn][maxm]; int vis[maxm]; int n, m; bool Find(int u) { for(int i = 1; i <= m; i++) { if(!vis[i] && mat[u][i]) { int v = i; vis[v] = 1; if(vLink[v] < cap[v]) { Link[v][vLink[v]++] = u; return true; } for(int j = 0; j < vLink[v]; j++) { if(Find(Link[v][j])) { Link[v][j] = u; return true; } } } } return false; } bool solve() { memset(Link, 0, sizeof(Link)); memset(vLink, 0, sizeof(vLink)); for(int i = 1; i <= n; i++) { memset(vis, 0, sizeof(vis)); if(!Find(i)) return false; } return true; } int main() { while(EOF != scanf("%d %d",&n, &m)) { for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { scanf("%d",&mat[i][j]); } } for(int i = 1; i <= m; i++) { scanf("%d",&cap[i]); } if(solve()) puts("YES"); else puts("NO"); } return 0; }
相关文章推荐
- hive中的 数组越界异常 IndexOutOfBoundsException
- C语言入门学习小总结
- TableView的删除操作
- Webform——购物车
- poj 1028 Web Navigation 【模拟题】
- B. Quasi Binary
- 算法导论 第三十一章:数论
- #淘宝#复制分享宝贝内容,打开淘宝APP,自动弹出宝贝提示信息
- Cocos2d-x利用jni调用java层代码
- oracle 高级队列
- LeetCode#111 Minimum Depth of Binary Tree
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记
- 【Treap】poj1442 Black Box
- 修改UIImage大小
- select实现输入模糊匹配与选择双重功能
- FirstAFNetWorking
- HDU 2818 - Building Block
- 活动目录(一)创建根域
- Tomcat服务器讲解
- lx-0721-1008不要62