POJ 2584 T-Shirt Gumbo(二分图最大匹配)
题意:
有五种衣服尺码:S,M,L,X,T
N个人,每个人都有一个可以穿的衣服尺码的范围,例:SX,意思是可以穿S,M,L,X的衣服。
给出五种尺码的衣服各有多少件。
如果可以满足所有人的要求,输出 T-shirts rock! 否则输出 I'd rather not wear a shirt anyway...
样例:
输入:
START 1
ST
0 0 1 0 0
END
START 2
SS TT
0 0 1 0 0
END
START 4
SM ML LX XT
0 1 1 1 0
END
ENDOFINPUT
输出:
T-shirts rock!
I'd rather not wear a shirt anyway...
I'd rather not wear a shirt anyway...
思路:
人数不多,衣服总件数也不多,直接建图,左集合是人,右集合是每一件衣服。二分图最大匹配。看代码。
代码:
char st[105];
char Range[25][5];
int n;
int num[10];
int cx[25],cy[205];
bool bmask[205];
vector<int> graph[25]; int findPath(int u){
int L=graph[u].size();
rep(i,0,L-1){
int v=graph[u][i];
if(!bmask[v]){
bmask[v]=true;
if(cy[v]==-1||findPath(cy[v])){
cy[v]=u;
cx[u]=v;
return 1;
}
}
}
return 0;
}
int MaxMatch(){
int ans=0;
rep(i,1,n) cx[i]=-1;
rep(i,1,num[5]) cy[i]=-1;
rep(i,1,n) if(cx[i]==-1){
mem(bmask,false);
ans+=findPath(i);
}
return ans;
} int main(){
map<char,int> mp;
mp['S']=1; mp['M']=2; mp['L']=3; mp['X']=4; mp['T']=5;
while(scanf("%s",st)!=EOF){
if(strcmp(st,"ENDOFINPUT")==0) break;
scanf("%d",&n);
rep(i,1,n) scanf("%s",Range[i]); num[0]=0;
rep(i,1,5){
int x;
scanf("%d",&x);
num[i]=num[i-1]+x;
}
scanf("%s",st); rep(i,1,n) graph[i].clear();
rep(i,1,n){
int u=mp[Range[i][0]], v=mp[Range[i][1]];
rep(j,num[u-1]+1,num[v]) graph[i].push_back(j);
}
int dd=MaxMatch();
if(dd>=n)
puts("T-shirts rock!");
else
puts("I'd rather not wear a shirt anyway...");
}
}
POJ 2584 T-Shirt Gumbo(二分图最大匹配)的更多相关文章
- [POJ] 1274 The Perfect Stall(二分图最大匹配)
题目地址:http://poj.org/problem?id=1274 把每个奶牛ci向它喜欢的畜栏vi连边建图.那么求最大安排数就变成求二分图最大匹配数. #include<cstdio> ...
- POJ 2536 Gopher II(二分图最大匹配)
题意: N只地鼠M个洞,每只地鼠.每个洞都有一个坐标. 每只地鼠速度一样,对于每只地鼠而言,如果它跑到某一个洞的所花的时间小于等于S,它才不会被老鹰吃掉. 规定每个洞最多只能藏一只地鼠. 问最少有多少 ...
- POJ 1463 Strategic game(二分图最大匹配)
Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot f ...
- poj 2724 Purifying Machine(二分图最大匹配)
题意: 有2^N块奶酪,编号为00...0到11..1. 有一台机器,有N个开关.每个开关可以置0或置1,或者置*.但是规定N个开关中最多只能有一个开关置*. 一旦打开机器的开关,机器将根据N个开关的 ...
- poj 3020 Antenna Placement(二分图最大匹配)
题意: N行M列的矩阵,每个格子里不是 * 就是 O . * :是一个利益点. O:是一个空白点. 每次可以用一个圈覆盖相邻的两个*.(左右相邻或上下相邻). 问最少需要多少个圈可以覆盖所有的*. 思 ...
- poj 2239 二分图最大匹配,基础题
1.poj 2239 Selecting Courses 二分图最大匹配问题 2.总结:看到一个题解,直接用三维数组做的,很巧妙,很暴力.. 题意:N种课,给出时间,每种课在星期几的第几节课上 ...
- Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配)
Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配) Description 农夫约翰上个 ...
- POJ 3041 Asteroids / UESTC 253 Asteroids(二分图最大匹配,最小点匹配)
POJ 3041 Asteroids / UESTC 253 Asteroids(二分图最大匹配,最小点匹配) Description Bessie wants to navigate her spa ...
- POJ 1469 COURSES 二分图最大匹配 二分图
http://poj.org/problem?id=1469 这道题我绝壁写过但是以前没有mark过二分图最大匹配的代码mark一下. 匈牙利 O(mn) #include<cstdio> ...
随机推荐
- Alex网络结构
AlexNet网络结构 网络包含8个带权重的层:前5层是卷积层,剩下的3层是全连接层.最后一层全连接层的输出是1000维softmax的输入,softmax会产生1000类标签的分布网络包含8个带 ...
- PHP的Mhash扩展函数的学习
这次我们要学习的又是一个 Hash 加密扩展.不过这个扩展 Mhash 已经集成在了 Hash 扩展中.同时也需要注意的是,这个扩展已经不推荐使用了,我们应该直接使用 Hash 扩展中的函数来进行 H ...
- Java学习之随堂笔记系列——day01
学习方法:听.问.敲.悟听:前提:上课要听懂,没有听懂可以及时的问.问:任何的问题都要及时的问.敲:重点内容.多写多练,只有写和练习才能发现新的问题,有问题就问.悟:举一反三.提升自己.今日内容:1. ...
- 获取用户id的方法
/** 获取ip */function getip() { if(getenv("HTTP_X_FORWARDED_FOR")!=''){ $cip = getenv(" ...
- win10蓝牙鼠标无法连接,需pin码
从控制面板进到"设备和打印机",点击"添加设备" 鼠标切换到匹配模式,就可以看到自己的鼠标了,点"下一步" 出现了一样的画面,是的,不用输P ...
- 9-threadLocal
ThreadLocal 多个线程访问同一个共享变量时特别容易出现并发问题,特别是多线程需要对共享变量进行写入时.为了保证线程安全,一般使用者在访问共享变量的时候需要进行适当的同步,如图 同步的一般措施 ...
- Win32对话框模板创建的窗口上响应键消息,Tab焦点切换消息,加速键消息
今天在学习的时候,发现对话框上不响应键盘消息,查了老半天,终于成功了,现分享出来, 1,首先要在消息循环的时候加如下代码. int WINAPI WinMain(_In_ HINSTANCE hIns ...
- 运用shapefile.js解析Shp文件
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- Editing Tools(编辑工具)
编辑工具 # Process: 修剪线 arcpy.TrimLine_edit("", "", "DELETE_SHORT") # Proc ...
- 云原生的弹性 AI 训练系列之三:借助弹性伸缩的 Jupyter Notebook,大幅提高 GPU 利用率
Jupyter Notebooks 在 Kubernetes 上部署往往需要绑定一张 GPU,而大多数时候 GPU 并没有被使用,因此利用率低下.为了解决这一问题,我们开源了 elastic-jupy ...