POJ 2584 T-Shirt Gumbo 二分图的多重匹配
题目链接:http://poj.org/problem?id=2584
题目大意:有SMLXT五种T恤型号,有N个人,每个人有一个可选的型号区间,你现在要发给N个人每人一条他可以选择的型号的T恤,问能否实现。
题目分析:二分图多重匹配模板题。
我们利用匈牙利算法来解决这道题。
但是因为这里是多重匹配,所以我们要稍微修改一下:
vec[i]用于存放型号i的衣服目前已分配的所有用户的编号;link[i]用于存储第i个用户目前获得的衣服的型号,如果没有获得则link[i] == -1;cover[i][j]用于表示这一次匹配第i个信号的第j件衣服有没有访问过。
代码:
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 22;
int n, m = 5, smallest[maxn], biggest[maxn], cnt[6];
vector<int> link[6];
bool cover[6][maxn];
string s;
bool dfs(int x, int pos, int y) {
cover[x][pos] = true;
if (link[x].size() <= pos) {
link[x].push_back(y);
return true;
}
for (int i = 0; i < cnt[x]; i ++) {
int z = link[x][i];
for (int j = smallest[z]; j <= biggest[z]; j ++) {
for (int k = 0; k < cnt[j]; k ++) {
if (!cover[j][k] && dfs(j,k, z) == true) {
return true;
}
}
}
}
return false;
}
bool solve() {
for (int i = 1; i <= 5; i ++) link[i].clear();
int ans = 0;
for (int i = 1; i <= n; i ++) {
bool flag = false;
memset(cover, false, sizeof(cover));
for (int j = smallest[i]; j <= biggest[i]; j ++) {
bool flag = false;
for (int k = 0; k < cnt[j]; k ++) {
if (!cover[j][k] && dfs(j, k, i) == true) {
flag = true;
break;
}
}
if (flag == true) {
ans ++;
break;
}
}
if (ans < i) return false;
}
return true;
}
int main() {
while (cin >> s) {
if (s == "ENDOFINPUT") break;
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> s;
switch (s[0]) {
case 'S': smallest[i] = 1; break;
case 'M': smallest[i] = 2; break;
case 'L': smallest[i] = 3; break;
case 'X': smallest[i] = 4; break;
case 'T': smallest[i] = 5; break;
default: break;
}
switch (s[1]) {
case 'S': biggest[i] = 1; break;
case 'M': biggest[i] = 2; break;
case 'L': biggest[i] = 3; break;
case 'X': biggest[i] = 4; break;
case 'T': biggest[i] = 5; break;
default: break;
}
}
for (int i = 1; i <= m; i ++) cin >> cnt[i];
cin >> s;
puts(solve() ? "T-shirts rock!" : "I'd rather not wear a shirt anyway...");
}
return 0;
}
POJ 2584 T-Shirt Gumbo 二分图的多重匹配的更多相关文章
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】
Jamie's Contact Groups Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- POJ 2289 Jamie's Contact Groups(多重匹配+二分)
题意: Jamie有很多联系人,但是很不方便管理,他想把这些联系人分成组,已知这些联系人可以被分到哪个组中去,而且要求每个组的联系人上限最小,即有一整数k,使每个组的联系人数都不大于k,问这个k最小是 ...
- hdu 3605 Escape 二分图的多重匹配(匈牙利算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others) ...
- POJ 1698 (二分图的多重匹配)
转载:http://www.cppblog.com/MatoNo1/archive/2011/03/26/142766.aspx 我们知道在一个图中,每个点最多只能匹配一条边的情况,是二分图的最大匹配 ...
- POJ - 2289 Jamie's Contact Groups (二分图多重匹配)
题意:N个人,M个团体.每个人有属于自己的一些团体编号.将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少. 分析:一个一对多的二分图匹配,且是最大值最小化问题.二分图的多重匹配建 ...
- [USACO2003][poj2112]Optimal Milking(floyd+二分+二分图多重匹配)
http://poj.org/problem?id=2112 题意: 有K个挤奶器,C头奶牛,每个挤奶器最多能给M头奶牛挤奶. 每个挤奶器和奶牛之间都有一定距离. 求使C头奶牛头奶牛需要走的路程的最大 ...
- POJ2289:Jamie's Contact Groups(二分+二分图多重匹配)
Jamie's Contact Groups Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/ ...
- hiho 第117周 二分图多重匹配,网络流解决
描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...
随机推荐
- JAVA中使用Dom解析XML
在G盘下新建XML文档:person.xml,XML代码: <?xml version="1.0" encoding="utf-8"?> <s ...
- 2019.11.15 JQ图片轮播
<div class="three"> <div class="bjtp"> <img class="bjpic b1& ...
- 【转】SignalR与ActiveMQ结合构建实时通信
一.概述 本教程主要阐释了如何利用SignalR与消息队列的结合,实现不同客户端的交互 SignalR如何和消息队列交互(暂使用ActiveMQ消息队列) SignalR寄宿在web中和其他Signa ...
- mov指令和 add以及sub 指令的区别
比如 mov ax,ds 比如 [0],ds #经过上机实验 add,sub指令不能对段寄存器操作
- Java 日期工具类(日期,月份加减等)--转
package util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.C ...
- (8)打鸡儿教你Vue.js
监听属性 监听属性 watch 通过 watch 来响应数据的变化 <div id = "app"> <p style = "font-size:25p ...
- 在Matlab终止程序后的异常
有时终止Matlab程序后,其内部指令会执行异常,出现不识别命令函数的情形.我遇到过执行sum命令出错的问题.退出程序,重启后正常.
- Pytest权威教程11-模块及测试文件中集成doctest测试
目录 模块及测试文件中集成doctest测试 编码 使用doctest选项 输出格式 pytest-specific 特性 返回: Pytest权威教程 模块及测试文件中集成doctest测试 编码 ...
- FCS省选模拟赛 Day1
Description Solution T1 shopping 目测是插板法乱搞一下 发现题解写的是容斥dp: \[ ans = \sum_i (-1)^ig[i] \] \(g[i]\)表示的有 ...
- cmake和json安装
一.cmake源码安装 官网下载源码:https://cmake.org/download/ 安装: ./bootstrap make make install cmake --version 二.j ...