题目链接:

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【二分图多重匹配】的更多相关文章

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

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

  2. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

  3. 稳定的奶牛分配 && 二分图多重匹配+二分答案

    题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...

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

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

  5. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

  6. 网络流24题 第五题 - PowerOJ1740 CodeVS1905 圆桌问题 二分图多重匹配 网络最大流

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - PowerOJ1740 - 有SPJ - 推荐 题目传送门 - CodeVS1905 - 无SPJ - 0% ...

  7. [HihoCoder1393]网络流三·二分图多重匹配

    题目大意: 班级有$N$名学生,运动会有$M$项不同的比赛,第$i$项比赛每个班需要派出$m_i$名选手参加,编号为i的学生最多同时参加给定的$b_i$项比赛中的任意$a_i$项比赛.根据统计的结果, ...

  8. 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 ...

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

    Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 7721   Accepted: ...

随机推荐

  1. 当JAVA集合移除自身集合元素时发生的诸多问题

    一段代码目的是想删除集合中包括"a"字符串的集合项: public class TestForeach { public static void main(String[] arg ...

  2. Android4.2以及最新SDK的尝鲜使用

    谷歌已经公布了Android4.2,而且也对应的更新了SDK到4.2.事实上最基本的是谷歌这次帮开发人员把eclipse.ADT.SDK整合 到了一起,我们仅仅须要下载一个ADT Boundle,就能 ...

  3. VirtualBox安装及使用说明和虚拟机安装XP系统图文教程

    virtualbox是一款开源的虚拟机软件,它能够支持多种操作系统的安装如:Solaris.Windows.DOS.Linux.OS/2 Warp.BSD等系统作为client操作系统,而且最新版本号 ...

  4. POJ 2404 Jogging Trails

    Jogging Trails Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2122   Accepted: 849 Des ...

  5. 让office2003和office2010共存的方法【转】

    前段时间由于工作需要安装office2010,每次打开word都会弹出安装配置界面,反之亦然.于是我在网上找了不少资料.也试了不少方法,终于试用了以下方法得以解决,以下来源于网络. 电脑上同时安装了O ...

  6. 同一个form里,不管哪个 submit 都是直接提交form表单里的内容

    要达到你的目的,就不能用类型为 submit 的按钮,要用 button,然后加onclick 方法来自定义预处理参数,然后再调用 submit 方法提交表单,比如 <script type=& ...

  7. socket为send和recv设置超时时间

    linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别 UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后 ...

  8. Oracle Data Guard 创建物理Standby数据库

    创建物理备库 机器名                    a1                    a2                    IP:                    192 ...

  9. HDU 3397 Sequence operation(线段树)

    HDU 3397 Sequence operation 题目链接 题意:给定一个01序列,有5种操作 0 a b [a.b]区间置为0 1 a b [a,b]区间置为1 2 a b [a,b]区间0变 ...

  10. jsp和serverlet的差别

    開始找工作面试的第一家公司,爱思创新 面试题: 1.jsp和serverlet的差别 简单来说: jsp:是包括java程序片的html文件servlet:是包括html的java文件 事实上说白了J ...