poj 2584 T-Shirt Gumbo(最大匹配 )

原创 2015年07月09日 20:21:53

题目大意:n个人,5种型号的T恤,给出每个人能够穿的T恤范围,以及5种T恤的数量,问能否使得每个人都能够穿上T恤。


明显的匹配问题。

建图:

X集合为n个人,Y集合为T恤。若第i个人能够穿第j件T恤,则两者连一条边,得到一个二分图。问题转化为求最大匹配,看最大匹配数是否等于n。


#include<iostream>
#include<vector>
#include<cstdio>
#include<map>
#include<cstring>
using namespace std;
bool T[205],Map[30][205];
int a[6],Left[205];
struct P{
    int l,r;
}p[30];

int match(int u){
    for(int i=1;i<=a[5];++i){
        if(Map[u][i]&&!T[i]){
            T[i]=1;
            if(!Left[i]||match(Left[i])){
                Left[i]=u;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    char s[10];
    int n,i,j;
    map<char,int>mp;
    mp['S']=1,mp['M']=2,mp['L']=3,mp['X']=4,mp['T']=5;
    while(~scanf("%s",s)){
        if(strcmp(s,"ENDOFINPUT")==0) break;
        scanf("%d",&n);
        memset(Map,0,sizeof(Map));
        for(i=1;i<=n;++i){
            scanf("%s",s);
            p[i].l=mp[s[0]],p[i].r=mp[s[1]];
        }
        a[0]=0;
        for(i=1;i<=5;++i) {scanf("%d",&a[i]); a[i]+=a[i-1];}
        for(i=1;i<=n;++i)
            for(j=a[p[i].l-1]+1;j<=a[p[i].r];++j) Map[i][j]=1;
        int ans=0;
        memset(Left,0,sizeof(Left));
        for(i=1;i<=n;++i){
            memset(T,0,sizeof(T));
            ans+=match(i);
        }
        scanf("%s",s);
        if(ans>=n) printf("T-shirts rock!\n");
        else puts("I'd rather not wear a shirt anyway...");
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

FPS 集合 [Trie树]

>【问题描述】 有一种特殊的集合叫做 PFS( Prefix Free Set)集合。 一个 PFS 集合由若干字符串构成,且不存在一个字符串是另一个字符串的前缀。空集也 被看作是 PFS 集合...

CDQZ 高新2016级ACM模拟赛第一套

CDQZ 高新2016级ACM模拟赛第一套result结果如上,因为人数问题,我们队只有两人但规则上允许每人都拥有一台电脑。 这次比赛还是蛮有意思的,在过程中能看见其他人的进度对自己也是一种鼓励(特...

PKU 2584 - T-Shirt Gumbo (二分图最大匹配 & 匈牙利算法 | 最大流 & EK)

题意 给出一个人能穿的型号和每个型号衣服的多少,求能不能每个人恰好分配到一件。 思路 第一次先用最大流写了一下,然后就试试最大匹配。 最大匹配就是把n件相同的衣服拆成一...

POJ2584 T-Shirt Gumbo【二分图多重匹配】

题目大意: 现在有5种型号(S、M、L、X、T)的衣服要发放给N个参赛队员。给出每个参赛者所需要衣服型号的范围。 在这个范围内的型号参赛者都能接受。再给出这5种型号衣服各自的数量,那么问题来了:是否存...

poj 2584 T-Shirt Gumbo 二分图多重匹配

题意: 有x个选手,每个选手有能接受的T恤号码,每种号码的T恤都有一定的数量,问是否有一种分配方案能让所有的选手都满意。 分析; 二分图的多重匹配问题,用匈牙利变形直接水。 代码: //po...
  • sepNINE
  • sepNINE
  • 2014年12月24日 16:05
  • 405

poj 2584 T-Shirt Gumbo 二分匹配

T-Shirt Gumbo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2935   ...

POJ 2584 T-Shirt Gumbo 最大流和多重匹配

最大流,二分匹配

hdu 3605 Escape/poj 2584 T-Shirt Gumbo(二分图多重匹配)

Escape Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total S...
  • acm_cxq
  • acm_cxq
  • 2016年07月26日 20:37
  • 164

poj3692Kindergarten poj2584T-Shirt Gumbo多重匹配 拆点 poj3041Asteroids

/* 1.独立集:任意两点都不相连的顶点的集合 2.定理:最大独立集=顶点数-最大匹配边 3.完全子图:任意两点都相连的顶点的集合(最大完全子图即最大团) 4.定理:最大团=原图补图的最大独立集=顶点...

【POJ】2584 T-Shirt Gumbo 最大流

传送门:【POJ】2584 T-Shirt Gumbo 题目分析:可多重匹配,我偷懒了就用最大流了。。。因为一些逗比错误ti...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 2584 T-Shirt Gumbo(最大匹配 )
举报原因:
原因补充:

(最多只允许输入30个字)