题目的意思就是有n件衣服,m个人.每个人可以穿两种型号的衣服,问可不可以满足.

6种型号衣服件数一样,也就是n件衣服,每种型号n/6件.

以前刚接触网络流,不知道网络流怎么解决二分图匹配,现在明白了.

首先图有两个部分,一个是源点与6个点(6种型号)相连,每条边容量为n/6(就是每种衣服有几件).

第二部分是一个汇点加上m个点(m个人),将所有人的点与汇点相连,边的容量为一(也就是每个人最后选一件)

然后这种型号如果可以给这个人穿,就连接两点,边的容量加1.

对这张图用最大流算法,算出最大流,如果等于m说明每个人都满足了..

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
const int N = 40;
const int INF = 0x3f3f3f3f;
int cap[N][N];
int flow[N][N];
int a[N];
int p[N];
int f;
int n,m;
char size[6][4] = {"XXL", "XL", "L", "M", "S", "XS"};
char sz[4];
int ek(int t) {queue<int> q;memset(flow , 0 ,sizeof(flow));f = 0;while(1) {memset(a, 0 ,sizeof(a));a[0] = INF;q.push(0);while(!q.empty()) {int u = q.front() ;q.pop();for (int v = 0 ; v <= t; v++) {if (!a[v] && cap[u][v] - flow[u][v] > 0) {p[v] = u ;q.push(v);a[v] = a[u] < cap[u][v] - flow[u][v] ? a[u] : cap[u][v] - flow[u][v];}}}if (a[t] == 0)break;for (int u = t ; u != 0 ;u = p[u]) {flow[p[u]][u] += a[t];flow[u][p[u]] -= a[t];}f += a[t];}return f;
}
int main () {int t;scanf("%d",&t);while(t--) {memset(cap , 0 ,sizeof(cap));scanf("%d%d",&n,&m);for (int i = 1 ;i <= 6 ;i++) cap[0][i] = n / 6;for (int i = 1 ; i <= m;i++){cap[6 + i][7 + m] = 1;int k = 2;while(k--) {scanf("%s",sz);for (int j = 0 ; j < 6 ;j++) {if(!strcmp(sz,size[j])) {cap[j + 1][6 + i] += 1;break;}}}}int ans = ek(7 + m);if(ans == m)printf("YES\n");elseprintf("NO\n");}
}

uva11045(最大二分图匹配)相关推荐

  1. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

  2. 二分图匹配匈牙利算法DFS实现

    1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...

  3. poj1274(二分图匹配)

    (一道基础的二分图匹配) 题目意思大概为N个牛和M个栅栏,一个牛和一个栅栏只能匹配一次,求最大匹配 直接套用二分图最大匹配模板即可 #include <iostream> #include ...

  4. poj2724(二分图匹配)

    题目大概意思为有部分奶酪需要处理,若两个奶酪的二进制只有一位不同,则可以一起处理,问最少需要处理几次 题目思路: 将可以一起处理的两个奶酪用边连接在一起,相当于边只连接二进制中有偶数个1的奶酪和二进制 ...

  5. 算法模板——二分图匹配

    实现功能为二分图匹配 原理:匈牙利算法,核心思想--匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之--匈牙利算法) 本程序以Codevs2776为例 详见Codev ...

  6. 算法:ACM二分图匹配 HDU2063

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2063 摘录于互联网,原创作者redraiment,很详细的二分图匹配入门资料! 2063 过山车 Pr ...

  7. BZOJ1433 [ZJOI2009]假期的宿舍 - 二分图匹配

    题解 一道裸的二分图匹配,稍微有一点细节需要注意, 但是非常裸= = 本校并且住校的向自己的床和 自己认识的并且本校的人的床连边 离校的不需要向外连边 不是本校的就和自己认识的 并且是本校的人的床连边 ...

  8. POJ2536 二分图匹配

    题意:      有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...

  9. URAL 1721 Two Sides of the Same Coin(二分图匹配,输出匹配对象)

    题意:给出n个人的信息,名字.特征.排名. 在排名相差2的前提下,特征为testdata可以与特征为statements的组队,特征为anything可以任何一人组队: 求最多匹配对数,并将每队名字输 ...

  10. zoj3988 二分图匹配

    给一个数组,对于每两个数加起来为素数那么就是一个集合,求不超过k个集合的最多数是多少 解法:二分图匹配,先打素数筛,预处理边集,匹配完之后分两种情况k>匹配数,那么可以直接输出匹配数*2,否则可 ...

最新文章

  1. ETH Zurich提出新型网络「ROAD-Net」,解决语义分割域适配问题
  2. Filter_细节_过滤器拦截方式配置
  3. SAP CRM 查询单据的时候 BAdI 里面的排序字段为何有些不生效
  4. 初步使用github,并上传下载文件
  5. 7天学完Java基础之4/7
  6. iOS-获取通讯录信息
  7. git push失败的解决办法(2)
  8. 物联网之NB-IoT技术实践开发二
  9. 最新PC微信多开——OD修改dll程序跳转逻辑实现多开
  10. 乐优、青橙商城相关技术总结
  11. 基于servlet+jsp 个人博客系统
  12. python表示颜色的代码_python 中颜色的表示
  13. XPO:Session管理与缓存--测试篇
  14. Tableau数据源(一)-引入数据源
  15. 开放集识别之GPD and GEV Classi ers
  16. 如何用Xinstall来做一款App运营推广?
  17. RabbitMQ简介及简单使用
  18. 全球及中国液压机行业应用范围调研及投资策略预测报告2022-2028年
  19. 搭建Iconic+angular混合APP开发环境
  20. java的sqlserver连库信息 包括增删改查 分页查询

热门文章

  1. 重言式判别 (数据结构课程设计)
  2. 广义线性模型(GLM)初级教程
  3. 第七周助教工作总结——NWNU李泓毅
  4. JasperReport生成pdf文件 Java开发pdf文件 pdf文件生成及下载
  5. 6.MySQL列Cardinality(基数)
  6. 笔记本电脑开机后自带的键盘用不了,需要重启电脑才能用
  7. ios vue 添加本地音乐_苹果手机vue怎么添加自己的音乐
  8. Intel CPU(i3、i5、i7、i9)型号、性能详细解读
  9. 程序员是做全栈工程师好?还是专注一个领域好?
  10. 国美易卡的标识符和关键字是什么(国美易卡)