<题目链接>

题目大意:

有n头牛,m个牛棚,每个牛棚都有一定的容量(就是最多能装多少只牛),然后每只牛对每个牛棚的喜好度不同(就是所有牛圈在每个牛心中都有一个排名),然后要求所有的牛都进牛棚,牛棚在牛心中的排名差计算方法为:所有牛中最大排名和最小排名之差+1(包括区间端点)。问最小的排名差。

解题分析:

先进行二分答案,二分枚举该区间等级的差值,然后根据枚举的区间差值找到所有的等级区间,判断这些等级区间中是否存在符合条件的。判断的依据就是个根据枚举的等级区间,对所有的牛和牛棚进行多重匹配,如果所有的牛都能够分配到牛棚中,则当前枚举的区间符合条件。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 1e3+;
struct Node{
int k,a[N]; //k代表牛棚当前的人数,a[N]存储牛棚中的所有人
}match[N];
int n,B,vis[N];
int G[N][N],capacity[N];
bool dfs(int u,int l,int r){
for(int i=;i<=B;i++){
if(!vis[i]&&G[u][i]>=l&&G[u][i]<=r){ //判断第i个牛棚在牛u心中的等级是否处于枚举的等级中
vis[i]=;
if(match[i].k<capacity[i]){ //如果该牛棚未满,则将牛u(暂时)分配到牛棚i中
match[i].a[++match[i].k]=u;
return true;
}
for(int j=;j<=match[i].k;j++){
if(dfs(match[i].a[j],l,r)){ //如果该牛棚已满,就枚举该牛棚中所有的牛,看他们是否能够找到其他能够分配的牛棚
match[i].a[j]=u; //如果能够找到的话,就用牛u来替代该牛的位置
return true;
}
}
}
}
return false;
}
bool Hungary(int l,int r){
memset(match,,sizeof(match));
for(int i=;i<=n;i++){
memset(vis,,sizeof(vis));
if(!dfs(i,l,r))return false; //只要有一只牛在当前枚举的区间内不能分配到牛棚中,就说明当前枚举的区间不合法
}
return true;
}
int main(){
while(scanf("%d%d",&n,&B)!=EOF){
memset(G,,sizeof(G));
for(int i=;i<=n;i++)
for(int j=;j<=B;j++){
int x;scanf("%d",&x);
G[i][x]=j; //第i头牛,对x牛棚的喜欢度是第j个等级
}
for(int i=;i<=B;i++)
scanf("%d",&capacity[i]); //每个牛棚的容量
int l=,r=B,ans=B;
while(l<=r){
int mid=(l+r)>>; //枚举区间最大等级与最小等级的差值
bool fp=false;
for(int i=;i<=B;i++){ //枚举区间的左端点,即该区间的最小等级
if(Hungary(i,i+mid)){ //判断在该等级范围内,是否满足条件
fp=true;break;
}
}
if(fp)ans=mid+,r=mid-; //ans记录的是该区间的大小,所以需要+1
else l=mid+;
}
printf("%d\n",ans);
}
}

2018-11-17

POJ 3189 Steady Cow Assignment 【二分】+【多重匹配】的更多相关文章

  1. POJ 3189——Steady Cow Assignment——————【多重匹配、二分枚举区间长度】

     Steady Cow Assignment Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I ...

  2. Poj 3189 Steady Cow Assignment (多重匹配)

    题目链接: Poj 3189 Steady Cow Assignment 题目描述: 有n头奶牛,m个棚,每个奶牛对每个棚都有一个喜爱程度.当然啦,棚子也是有脾气的,并不是奶牛想住进来就住进来,超出棚 ...

  3. POJ3189 Steady Cow Assignment —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-3189 Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65 ...

  4. POJ 3189 Steady Cow Assignment

    题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小.   题目输入: 首先是两个 ...

  5. POJ 3189 Steady Cow Assignment【网络流】

    题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小. 牛棚个数最多为20,那么直 ...

  6. POJ3189_Steady Cow Assignment(二分图多重匹配/网络流+二分构图)

    解题报告 http://blog.csdn.net/juncoder/article/details/38340447 题目传送门 题意: B个猪圈,N头猪.每头猪对每一个猪圈有一个惬意值.要求安排这 ...

  7. Steady Cow Assignment---poj3189(多重匹配+二分)

    题目链接:http://poj.org/problem?id=3189 题意:有n头牛,B个牛棚,每头牛对牛棚都有一个喜欢度,接下来输入N*B的矩阵第i行第j列的数x表示:第i头牛第j喜欢的是x; 第 ...

  8. POJ3189:Steady Cow Assignment(二分+二分图多重匹配)

    Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7482   Accepted: ...

  9. POJ3189 Steady Cow Assignment

    Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6817   Accepted:  ...

随机推荐

  1. Confluence 6 数据库整合的方法 1:基本流程

    步骤 1:对你的插件进行记录 对你近期在 Confluence 中安装和启用的插件进行记录,这你可以在后期对插件进行重新安装或者调整.针对你安装的插件,你需要记录下面的一些内容: 插件名称 版本号 启 ...

  2. mysql 安装问题一:由于找不到MSVCR120.dll,无法继续执行代码.重新安装程序可能会解决此问题。

    这种错误是由于未安装  vcredist  引起的 下载  vcredist  地址:https://www.microsoft.com/zh-CN/download/details.aspx?id= ...

  3. redis客户端、分布式锁及数据一致性

    Redis Java客户端有很多的开源产品比如Redission.Jedis.lettuce等. Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持:Redis ...

  4. select下拉框可以直接取list里的内容 不用非得转map (不得不承认我是个ZZ,这么简单的问题才反应过来,--^--)

    需求描述:select下拉框的填充项,从后台传来的list中获取 自黑一下:之前有篇随笔,写的是通过map传到前台,在前台的select中的value属性取值 用map的key,而select的tex ...

  5. hdu4276 依赖背包

    网上题解都是用spfa求1-n路径的,但其实dfs一次就可以了.. #include <iostream> #include <cstdio> #include <str ...

  6. 拓展中国剩余定理(ex_crt)

    一般来讲,crt(中国剩余定理)比较常见,而ex_crt(拓展中国剩余定理)不是很常用 但是noi 2018偏偏考了这么个诡异的东西... 所以这里写一个ex_crt模板 模型: 求一个x满足上述方程 ...

  7. OOP和面向对象

    OOP具有三大特点 1.封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法.于是开发人员只 需要关注这个类如何使用,而不用去关 ...

  8. node.js vue-axios和vue-resource

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 迅速上手:使用taro构建微信小程序基础教程

    前言 由于微信小程序在开发上不能安装npm依赖,和开发流程上也饱受诟病:Taro 是由京东·凹凸实验室(aotu.io)倾力打造的 多端开发解决方案,它的api基于react,在本篇文章中主要介绍了使 ...

  10. Git强制拉取覆盖本地

    1.多条执行 git fetch --all git reset --hard origin/master git pull 2.单条执行 git fetch --all && git ...