题意:acmer比赛穿的T-shirt 有 S M L X T五种型号,每个人穿的型号介于给出的两字母之间,五种 T-shirt 每种都有一定的数量,

问是否每个人都可以得到自己需要的型号

这个题。。。不评价。。。开始构图构错了,本想增加一个源点m,增加一个汇点,中间只要 T-shirt的5个点,如果有队员需要某种

T-shirt,该点与源点的连线就+1。某种T-shirt数量有多少,就把该点与汇点连线,权值为该T-shirt的数量,结果WA,好好考虑也是,

不画出错误的图了。 正确的思路,把人和T-shirt 都看成点,人和源点连线,权值为1,该队员再和需要的T-shirt 连线,权值为1,然后

T-shirt再与汇点连线,权值为数量。。。

代码:

//虽然点不多,由于构图原因,不能用矩阵map
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#define inf 1<<30
#define mMAX 300
#define nMAX 30
#define Min(a,b)a<b?a:b
using namespace std;
int level[nMAX],head[nMAX];
int n,t,s_edge;
int a[100];
struct Edge
{int to,w,next;
} edge[mMAX];void addedge(int u,int v,int W)
{s_edge++;edge[s_edge].to=v;edge[s_edge].w=W;edge[s_edge].next=head[u];head[u]=s_edge;s_edge++;edge[s_edge].to=u;edge[s_edge].w=0;edge[s_edge].next=head[v];head[v]=s_edge;return ;
}int dfs(int x,int cap)
{if(x==t)return cap;int temp=cap;for(int e=head[x];e;e=edge[e].next){int To=edge[e].to;if(level[To]==level[x]+1&&temp>0&&edge[e].w>0){int tt=dfs(To,Min(temp,edge[e].w));edge[e].w-=tt;edge[e^1].w+=tt;temp-=tt;}}return cap-temp;
}bool bfs()
{queue<int>qu;memset(level,-1,sizeof(level));level[0]=0;qu.push(0);while(!qu.empty()){int tt=qu.front();qu.pop();for(int e=head[tt];e;e=edge[e].next){int To=edge[e].to;if(level[To]==-1&&edge[e].w>0){level[To]=level[tt]+1;qu.push(To);}}}if(level[t]!=-1)return 1;return 0;
}int dinic()
{int SUM=0;while(bfs()){SUM+=dfs(0,inf);}return SUM;
}void init()//由于惯性,开始写的 ch2[0]-64,意思就是从A开始,太机械了!
{a['S']=1;a['M']=2;a['L']=3;a['X']=4;a['T']=5;return ;
}int main()
{init();char ch1[20],ch2[3];int i,j;while(~scanf("%s",ch1)){if(!strcmp(ch1,"ENDOFINPUT"))break;memset(head,0,sizeof(head));s_edge=1;scanf("%d",&n);t=n+6;for(i=1;i<=n;i++){addedge(0,i,1);scanf("%s",ch2);int m1=ch2[0],m2=ch2[1];for(j=a[m1];j<=a[m2];j++)addedge(i,j+n,1);}int num=0;for(i=1;i<=5;i++){scanf("%d",&j);addedge(i+n,t,j);num+=j;//开始写的num++,晕死,不来动脑子的}scanf("%s",ch1);if(num<n)//剪枝printf("I'd rather not wear a shirt anyway...\n");else{num=dinic();if(num<n)printf("I'd rather not wear a shirt anyway...\n");else printf("T-shirts rock!\n");}}return 0;
}

  

  

转载于:https://www.cnblogs.com/sdau10kuaile/archive/2012/02/19/2357816.html

POJ 2584 T-Shirt Gumbo 构图 最大流相关推荐

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

    点击打开链接 T-Shirt Gumbo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2488   Accepted: 1 ...

  2. POJ 2584 T-Shirt Gumbo (二分图多重最大匹配)

    题意 现在要将5种型号的衣服分发给n个参赛者,然后给出每个参赛者所需要的衣服的尺码的大小范围,在该尺码范围内的衣服该选手可以接受,再给出这5种型号衣服各自的数量,问是否存在一种分配方案使得每个选手都能 ...

  3. POJ 1087 A Plug for UNIX 会议室插座问题 构图+最大流

    题目链接:POJ 1087 A Plug for UNIX A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  4. POJ - 2584 T-Shirt Gumbo 二分多重匹配

    题目链接 题意:二分多重匹配的裸题,与匈牙利算法不同的之前的男女匹配不同,这个题目的题意是每一个人可以选择多种型号的衣服,并且每一种衣服可以很多人穿,但是每件衣服有数量限制,问最多有多少匹配数. 我们 ...

  5. POJ 2112 Optimal Milking(二分+最大流)

    POJ 2112 Optimal Milking 题目链接 题意:给定一些机器和奶牛,在给定距离矩阵,(不在对角线上为0的值代表不可达),每一个机器能容纳m个奶牛.问全部奶牛都能挤上奶,那么走的距离最 ...

  6. poj 3189 Steady Cow Assignment(二分+最大流)

    题意:N头牛(1000),B个农场(20),每个农场可以容纳一定数量的牛. 每头牛对每个农场都有一个排名(排名从1~B).每头牛都会在B个农场中的某一个,这头牛的高兴程度是它对这个农场的排名.为了使每 ...

  7. POJ 2195 Going Home 最小费用最大流

    这题目同时也可以用KM()算法做,最求小权值匹配而已,权值设置为负数就行,具体KM算法参照:http://blog.csdn.net/cnh294141800/article/details/1895 ...

  8. POJ 2135 Farm Tour (最小费用最大流)

    Description 给出一张\(N\)个点\(M\)条边的带权无向图,结点编号从\(1\)到\(N\),求从\(1\)到\(N\)再到\(1\)的最短路,每条边最多走一次. Input 第一行给出 ...

  9. POJ 2396 有上下界的可行流

    题意: 有一个n*m的方阵,里面的数字未知,但是我们知道如下约束条件: 每一行的数字的和 每一列的数字的和 某些格子有特殊的大小约束,用大于号,小于号和等于号表示 问:是否存在用正数填充这个方阵的方案 ...

最新文章

  1. 学习笔记92—python 画横竖分界线
  2. Quartz简单触发
  3. 学计算机趣图,我的世界:六张玩家自制趣图,最后一张,想起了“骗”父母买电脑...
  4. yii2 behavior 排除某个方法_中学科目二 | 教学方法
  5. centos7 git安装
  6. Springboot直接访问templates中的html
  7. python利用faker,输出企业名称、用户名称、手机号、地址信息等测试数据实例
  8. Android 进程生命周期 Process Lifecycle
  9. android 多线程类,Android 多线程处理之多线程用法大集合
  10. 计算机网络--基站 NFC 蓝牙 RFID ETC 云计算 云桌面
  11. verilog语法基础
  12. 16Aspx.com源码2013年10月到2013年12月详细
  13. blender建模小试
  14. 录屏可以录声音吗?录制带声音的视频,这个方法轻松解决
  15. 去重数组中相同的字符串
  16. 关于win11 碍眼的主文件夹的有效删除办法
  17. WEB安全全基础漏洞学习
  18. 【笑话】网络上的经典马屁回贴~~~
  19. C++实现中文大写与阿拉伯数字的相互转换(类封装)
  20. 功率放大器TDA7851L

热门文章

  1. SSM框架之Spring MVC(三)http响应、文件上传
  2. 树莓派+Kubernetes
  3. 一个关于超级英雄题材电影剧本的脑洞
  4. Project——编制进度计划、保存基准
  5. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别
  6. golang web开发获取get、post、cookie参数
  7. y700支持m2硬盘_两块硬盘一起读写?奥睿科M.2 NVMe双盘位固态硬盘盒使用
  8. 计算机一级考试表格题2010,2010年计算机一级考试一级WINDOWS笔试模拟题及答案
  9. OpenResty安装下载
  10. git pull没有更新成功_关于git pull时出现的问题及解决反思