POJ2584 T-Shirt Gumbo【二分图多重匹配】
题目链接:
id=2584">http://poj.org/problem?id=2584
题目大意:
如今有5种型号(S、M、L、X、T)的衣服要发放给N个參赛队员。给出每一个參赛者所须要衣服型号的范围。
在这个范围内的型号參赛者都能接受。再给出这5种型号衣服各自的数量,那么问题来了:是否存在一种
分配方案使得全部參赛队员都可以拿到自己型号范围内的衣服。
思路:
二分图匹配是一个对一个的匹配,这里是一对多匹配。须要用二分图多重匹配的模型来做。详细就是把原
先匈牙利算法中的cy[MAXN]更换为一个2维数组cy[MAXN][MAXN]。
cy[i][j]表示与元素yi匹配的第j个元
素,同一时候用vey[i]来记录与元素yi匹配的元素的数量。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 33; int Map[MAXN][MAXN];
bool Mask[MAXN];
int NX,NY,N; int vcy[MAXN];
int cy[MAXN][MAXN]; int limit[MAXN]; bool FindPath(int u)
{
for(int i = 1; i <= 5; ++i)
{
if(Map[u][i] && !Mask[i])
{
Mask[i] = 1;
if(vcy[i] < limit[i])
{
cy[i][vcy[i]++] = u;
return true;
} for(int j = 0; j < limit[i]; ++j)
{
if(FindPath(cy[i][j]))
{
cy[i][j] = u;
return true;
}
}
}
}
return false;
} void MulMatch()
{
int Ans = 0;
memset(vcy,0,sizeof(vcy));
for(int i = 1; i <= N; ++i)
{
memset(Mask,0,sizeof(Mask));
Ans += FindPath(i); }
if(Ans == N)
printf("T-shirts rock!\n");
else
printf("I'd rather not wear a shirt anyway...\n");
} int main()
{
char s[20];
while(~scanf("%s",s))
{
if(strcmp(s,"ENDOFINPUT") == 0)
break;
scanf("%d",&N);
memset(Map,0,sizeof(Map));
for(int i = 1; i <= N; ++i)
{
scanf("%s",s);
char a = s[0];
char b = s[1];
int u,v;
if(a == 'S')
u = 1;
else if(a == 'M')
u = 2;
else if(a == 'L')
u = 3;
else if(a == 'X')
u = 4;
else if(a == 'T')
u = 5; if(b == 'S')
v = 1;
else if(b == 'M')
v = 2;
else if(b == 'L')
v = 3;
else if(b == 'X')
v = 4;
else if(b == 'T')
v = 5;
for(int j = u; j <= v; ++j)
Map[i][j] = 1;
}
for(int i = 1; i <= 5; ++i)
scanf("%d",&limit[i]);
scanf("%s",s);
MulMatch();
} return 0;
}
POJ2584 T-Shirt Gumbo【二分图多重匹配】的更多相关文章
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...
- 稳定的奶牛分配 && 二分图多重匹配+二分答案
题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...
- hiho 第117周 二分图多重匹配,网络流解决
描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...
- 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
[题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
- 网络流24题 第五题 - PowerOJ1740 CodeVS1905 圆桌问题 二分图多重匹配 网络最大流
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - PowerOJ1740 - 有SPJ - 推荐 题目传送门 - CodeVS1905 - 无SPJ - 0% ...
- [HihoCoder1393]网络流三·二分图多重匹配
题目大意: 班级有$N$名学生,运动会有$M$项不同的比赛,第$i$项比赛每个班需要派出$m_i$名选手参加,编号为i的学生最多同时参加给定的$b_i$项比赛中的任意$a_i$项比赛.根据统计的结果, ...
- hdu3605 Escape 二分图多重匹配/最大流
2012 If this is the end of the world how to do? I do not know how. But now scientists have found tha ...
- POJ2289 Jamie's Contact Groups(二分图多重匹配)
Jamie's Contact Groups Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 7721 Accepted: ...
随机推荐
- Learning Web
1.UDACITY https://www.udacity.com/course/cs258
- 配置nexus仓库
Nexus有许多默认仓库:Central,Releases,Snapshots,和3rd Party 1.配置central仓库 Nexus内置了Maven中央代理仓库Central.选择仓库列表中的 ...
- HDU 5046 Airport(DLX反复覆盖)
HDU 5046 Airport 题目链接 题意:给定一些机场.要求选出K个机场,使得其它机场到其它机场的最大值最小 思路:二分+DLX反复覆盖去推断就可以 代码: #include <cstd ...
- linux学习之四---gdb调试
在Linux应用程序开发中,最经常使用的调试器是gdb. 一.启动和退出gdb gdb调试的对象是可运行文件,而不是程序的源码.假设要使一个可运行文件能够被gdb调试,那么使用编译器gcc编译时须要增 ...
- SharePoint2010 部署步骤“激活功能”中出现错误:无法启动计算机“PCName”上的服务SPUserCodeV4
在SharePoint2010开发中,选择部署类型为“部署为沙盒解决方案”,在部署代码是出现如下错误提示: 部署步骤“激活功能”中出现错误:无法启动计算机“PCName”上的服务SPUserCodeV ...
- EasyUI - DataGrid 组建 - [ 新增功能 ]
效果: html代码: <div> <!--使用JS加载方式--> <table id="tab"></table> <!-- ...
- linux命令:find
先上例子: find ./*_src -type f | xargs grep -ils "date" 在指定的那些文件夹下面,递归寻找包含“date” 字符串的普通文件. fin ...
- Linux路由器
Linux路由器 武溪嵌人 钻研嵌入式,改变未来 http://blog.csdn.net/zhang_danf Linux路由器 http://blog.csdn.net/zhang_dan ...
- Windows Azure使用VS 2010的云应用开发过程
原文 Windows Azure使用VS 2010的云应用开发过程 作为技术人员,如果在2010还不知道云计算,那么你已经“OUT”了:作为Visual Studio平台的使用者,如果你不知道VS 2 ...
- perl 匿名函数传参
$subref=sub { my $a=shift; return $a; }; print $subref->("xxyyzz");