hdu 3605 二分图多重匹配
来源:互联网 发布:二手房交易软件 编辑:程序博客网 时间:2024/06/05 23:01
转载地址:http://www.cnblogs.com/Griselda/archive/2012/09/17/2689345.html题意:给出每个人适合住的星球信息和该星球能住多少人 第一行给出n m 代表有 n 个人 m 个星球然后接下来n行每行m个数字 1代表适合第 i 个星球 0 代表不适合第 i 个星球最后一行m个数表示第 i 个星球最多可以住多少个人问是不是所有人都可以住到星球上思路:多重匹配Tips:多重匹配即 X 集合上的点对应 Y 集合上多个点 而 Y 集合上的点对应 X 中的一个点
#include <stdio.h>//感觉类似于二分匹配#include <cstring>#define clr(x) memset(x, 0, sizeof(x))const int INF = 0x1f1f1f1f;bool G[100010][15];//关系矩阵int limit[15];//限制条件bool vis[15];int v1, v2;int v[15];//记录当前星球的数目int vv[15][100010];//模拟容器bool find(int u)//找u的匹配星球{ int i, j, k; for(i = 0; i < v2; ++i) { if(G[u][i] && !vis[i]) { vis[i] = true; if(v[i] < limit[i]) {//如果还有容量就加入进去 vv[i][v[i]++] = u; return true; } for(j = 0; j < v[i]; ++j) {//没有容量了,就将原来容量里面的的找是否可以匹配 if(find(vv[i][j])) { vv[i][j] = u;//如果可以匹配就将当前容量里面的替换为u return true; } } } } return false;}bool solve(){ clr(v), clr(vv); for(int i = 0; i < v1; ++i) {//和二分匹配思想差不多 clr(vis); if(!find(i)) {//如果没有匹配的说明不能完全匹配 return false; } } return true;}int main(){ int i, j, k; while(scanf("%d %d", &v1, &v2) != EOF) { clr(G); for(i = 0; i < v1; ++i) for(j = 0; j < v2; ++j) { scanf("%d", &G[i][j]); } for(i = 0; i < v2; ++i) scanf("%d", &limit[i]); if(solve()) puts("YES"); else puts("NO"); } return 0;}
0 0
- hdu 3605 二分图多重匹配
- hdu 3605 二分图多重匹配
- hdu 3605 Escape (二分图多重匹配)
- hdu 3605 Escape【二分图多重匹配】
- HDU 3605 Escape【二分图多重匹配】
- hdu 3605 二分图多重匹配
- hdu 3605 Escape(二分图多重匹配问题)
- HDU 3605 Escape (二分图的多重匹配)
- hdu 3605 (二分图多重匹配或最大流)
- hdu 3605 Escape (二分图的多重匹配)
- hdu 3605 Escape (二分图多重匹配)
- HDU 3605 Escape (二分图多重匹配模板)
- HDU 3605 Escape (二分图多重匹配模板)
- 二分图多重匹配(HDU 2255)
- hdu 3065 二分图多重匹配
- HDU 1669 二分+多重匹配
- hdu 1669(二分图多重匹配+二分枚举)
- 二分图多重匹配
- linux学习笔记鸟哥的私房菜(一)
- 面向对象 笔记
- eclipse使用技巧
- MySQL数据库 触发器
- M3调试
- hdu 3605 二分图多重匹配
- 360极速模式可以浏览部分网页,其它浏览器不能浏览任何网页
- 堂俸嗡庞及文柏庞谐跋澈
- 劝埔匝沉挡心匀钦善燃山
- 品俾庞悍墩鹊腾酌感孔匝
- 献植驯啪碧徒迫苛九禄僖
- 频媒忠忧倍诵速嘿显茁垂
- 13_自定义组合控件&自定义控件属性
- 魏副冉撞钟箍虐糙饲泼砍