题目链接:http://poj.org/problem?id=2584

题目大意:有SMLXT五种T恤型号,有N个人,每个人有一个可选的型号区间,你现在要发给N个人每人一条他可以选择的型号的T恤,问能否实现。

题目分析:二分图多重匹配模板题。

我们利用匈牙利算法来解决这道题。

但是因为这里是多重匹配,所以我们要稍微修改一下:

  • vec[i] 用于存放型号i的衣服目前已分配的所有用户的编号;
  • link[i] 用于存储第i个用户目前获得的衣服的型号,如果没有获得则 link[i] == -1
  • cover[i][j] 用于表示这一次匹配第i个信号的第j件衣服有没有访问过。

代码:

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 22; int n, m = 5, smallest[maxn], biggest[maxn], cnt[6];
vector<int> link[6];
bool cover[6][maxn];
string s; bool dfs(int x, int pos, int y) {
cover[x][pos] = true;
if (link[x].size() <= pos) {
link[x].push_back(y);
return true;
}
for (int i = 0; i < cnt[x]; i ++) {
int z = link[x][i];
for (int j = smallest[z]; j <= biggest[z]; j ++) {
for (int k = 0; k < cnt[j]; k ++) {
if (!cover[j][k] && dfs(j,k, z) == true) {
return true;
}
}
}
}
return false;
} bool solve() {
for (int i = 1; i <= 5; i ++) link[i].clear();
int ans = 0;
for (int i = 1; i <= n; i ++) {
bool flag = false;
memset(cover, false, sizeof(cover));
for (int j = smallest[i]; j <= biggest[i]; j ++) {
bool flag = false;
for (int k = 0; k < cnt[j]; k ++) {
if (!cover[j][k] && dfs(j, k, i) == true) {
flag = true;
break;
}
}
if (flag == true) {
ans ++;
break;
}
}
if (ans < i) return false;
}
return true;
} int main() {
while (cin >> s) {
if (s == "ENDOFINPUT") break;
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> s;
switch (s[0]) {
case 'S': smallest[i] = 1; break;
case 'M': smallest[i] = 2; break;
case 'L': smallest[i] = 3; break;
case 'X': smallest[i] = 4; break;
case 'T': smallest[i] = 5; break;
default: break;
}
switch (s[1]) {
case 'S': biggest[i] = 1; break;
case 'M': biggest[i] = 2; break;
case 'L': biggest[i] = 3; break;
case 'X': biggest[i] = 4; break;
case 'T': biggest[i] = 5; break;
default: break;
}
}
for (int i = 1; i <= m; i ++) cin >> cnt[i];
cin >> s;
puts(solve() ? "T-shirts rock!" : "I'd rather not wear a shirt anyway...");
}
return 0;
}

POJ 2584 T-Shirt Gumbo 二分图的多重匹配的更多相关文章

  1. hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)

    #1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...

  2. POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】

    Jamie's Contact Groups Time Limit:7000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I ...

  3. POJ 2289 Jamie's Contact Groups(多重匹配+二分)

    题意: Jamie有很多联系人,但是很不方便管理,他想把这些联系人分成组,已知这些联系人可以被分到哪个组中去,而且要求每个组的联系人上限最小,即有一整数k,使每个组的联系人数都不大于k,问这个k最小是 ...

  4. hdu 3605 Escape 二分图的多重匹配(匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others)    ...

  5. POJ 1698 (二分图的多重匹配)

    转载:http://www.cppblog.com/MatoNo1/archive/2011/03/26/142766.aspx 我们知道在一个图中,每个点最多只能匹配一条边的情况,是二分图的最大匹配 ...

  6. POJ - 2289 Jamie's Contact Groups (二分图多重匹配)

    题意:N个人,M个团体.每个人有属于自己的一些团体编号.将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少. 分析:一个一对多的二分图匹配,且是最大值最小化问题.二分图的多重匹配建 ...

  7. [USACO2003][poj2112]Optimal Milking(floyd+二分+二分图多重匹配)

    http://poj.org/problem?id=2112 题意: 有K个挤奶器,C头奶牛,每个挤奶器最多能给M头奶牛挤奶. 每个挤奶器和奶牛之间都有一定距离. 求使C头奶牛头奶牛需要走的路程的最大 ...

  8. POJ2289:Jamie's Contact Groups(二分+二分图多重匹配)

    Jamie's Contact Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/ ...

  9. hiho 第117周 二分图多重匹配,网络流解决

    描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...

随机推荐

  1. http和https 握手过程

    这几天测试打印机一直出现打印延迟或者不打印的BUG.找了几天也没有发现为啥没有打印或者打印延迟.然后今天公司的研发大佬过来找问题,并开个会,瞬间所有的问题都找出了并且知道怎么解决了.大佬果然还是大佬. ...

  2. 任晓蕊 2019-2020-1 20199302《Linux内核原理与分析》第四周作业

    实验内容 在实验楼的环境中敲入命令 cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img ...

  3. P4462 [CQOI2018]异或序列 莫队

    题意:给定数列 \(a\) 和 \(k\) ,询问区间 \([l,r]\) 中有多少子区间满足异或和为 \(k\). 莫队.我们可以记录前缀异或值 \(a_i\),修改时,贡献为 \(c[a_i\bi ...

  4. SpringMVC的数据效验

    Spring MVC本身没有数据校验的功能,它使用Hibernate的校验框架来完成. 1.导入pom节点 <!-- https://mvnrepository.com/artifact/org ...

  5. js通过html的url获取参数值

    function getUrlParameter(name){ name = name.replace(/[]/,"\[").replace(/[]/,"\[" ...

  6. 从0到N建立高性价比的大数据平台(转载)

    2016-07-29 14:13:23 钱曙光 阅读数 794 原文链接:https://blog.csdn.net/qiansg123/article/details/80124521 声明:本文为 ...

  7. 自用ajxa 后台管理请求

    /** * 保存或者修改商品信息 * @returns */ function saveOrUpdateBaseGoodInfo(){ var json={}; var goodName=$.trim ...

  8. 【EF】vs2017中没有EF模型

    在添加->新建项目 中找不到实体模型? 或者 在vs中打开edmx文件时,显示的只有文本,没有图形模式 原因:是因为没有安装实体模型插件 解决方法: 1.打开网址 https://marketp ...

  9. 洛谷P1706全排列问题

     P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组 ...

  10. 【一起来烧脑】一步学会TypeScript入门

    [外链图片转存失败(img-rmJXMGFs-1563388353181)(https://upload-images.jianshu.io/upload_images/11158618-dd813e ...