题意:有一些牛和牛棚(有容量),每头牛对牛棚有喜好程度,要求每头牛都有一个棚子的情况下,找最小的喜好程度之差

题解:题意是真的恶心,wa了好久才发现没读懂,一直以为输入 的是排名,其实是牛棚标号,从1到m。用最大流一直tle,无奈还是用匈牙利算法,对于匈牙利算法求解二分图多重匹配,可以用一个容量数组来操作,如果容量没满,那么直接放进来,否则就遍历一遍,看是否有可能找到增广路,这题是二分差值,然后通过遍历找满足条件的最小结果。

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 20090717
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f; int ra[N][],c[],num[];
bool vis[];
struct edge{
int to,Next;
}e[maxn<<];
int n,m,ans[][N];
int cnt,head[N];
void add(int u,int v)
{
// cout<<u<<" "<<v<<endl;
e[cnt].to=v;
e[cnt].Next=head[u];
head[u]=cnt++;
}
bool match(int x)
{
for(int i=head[x];~i;i=e[i].Next)
{
int y=e[i].to;
if(vis[y])continue;
vis[y]=;
if(num[y]<c[y])
{
ans[y][++num[y]]=x;
return ;
}
else
{
for(int j=;j<=c[y];j++)
{
if(match(ans[y][j]))
{
ans[y][j]=x;
return ;
}
}
}
}
return ;
}
void init()
{
cnt=;
for(int i=;i<=n;i++)head[i]=-;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
ans[i][j]=;
for(int i=;i<=m;i++)num[i]=;
}
bool isok(int x)
{
for(int k=; k+x<=m; k++)
{
init();
for(int i=; i<=n; i++)
for(int j=k+; j<=k+x; j++)
add(i,ra[i][j]);
int res=;
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)vis[j]=;
if(match(i))res++;
}
if(res==n)
{
return ;
}
}
return ;
}
int main()
{
/*ios::sync_with_stdio(false);
cin.tie(0);*/
while(~scanf("%d%d",&n,&m))
{
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
scanf("%d",&ra[i][j]);
for(int i=; i<=m; i++)scanf("%d",&c[i]);
int l=,r=m+;
while(r-l>)
{
int mid=(l+r)/;
if(isok(mid))r=mid;
else l=mid;
}
printf("%d\n",r);
}
return ;
}
/********************
6 6
2 3 4 5 6 1
3 6 4 5 1 2
2 6 4 5 1 3
3 6 2 5 1 4
1 3 4 2 6 5
2 3 4 5 1 6
2 2 2 2 2 2
********************/

poj3189二分图多重匹配的更多相关文章

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

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

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

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

  3. hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)

    #1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...

  4. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

  5. 稳定的奶牛分配 && 二分图多重匹配+二分答案

    题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...

  6. hiho 第117周 二分图多重匹配,网络流解决

    描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...

  7. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

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

    题目链接: id=2584">http://poj.org/problem?id=2584 题目大意: 如今有5种型号(S.M.L.X.T)的衣服要发放给N个參赛队员.给出每一个參赛者 ...

  9. 网络流24题 第五题 - PowerOJ1740 CodeVS1905 圆桌问题 二分图多重匹配 网络最大流

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - PowerOJ1740 - 有SPJ - 推荐 题目传送门 - CodeVS1905 - 无SPJ - 0% ...

随机推荐

  1. HTML页面布局

    接下来的下面代码,只是给了一个大的前端编写布局,如果你已经是牛人了,就当没看到,如果是一些初学者,不妨拿去用用,里面也写了一些常用的css样式,现在虽然有很多牛逼的前段框架,用起来也非常得心应手,但是 ...

  2. ubuntu(已经配置了python2+opencv)简易配置python3的opencv:

    所达到的效果就是python2与python3都能使用opencv参考:http://blog.csdn.net/jiandanjinxin/article/details/71438780https ...

  3. nfs共享存储

    1.下载软件包 yum install nfs-utils nfs-utils-lib -y 2.编辑/etc/exports文件: 1.创建目录:mkdir -p /home/glance2.编辑e ...

  4. 函数没有返回值,默认返回undefined

    var  a =( function(){return})(); a = undefined;

  5. ThinkPHP框架基础知识一

    ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来 ...

  6. yii框架的中的一些使用介绍

    Yii框架的使用整理 获取配置文件中的数据 Yii::$app->params[‘配置文件中对应的参数名称’] 获取文件表单提交的数据 Yii::$app->request->pos ...

  7. Ubuntu16.04下编译android6.0源码

    http://blog.csdn.net/cnliwy/article/details/52189349 作为一名合格的android开发人员,怎么能不会编译android源码呢!一定要来一次说编译就 ...

  8. STM32 USB虚拟串口

    串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方 ...

  9. jQuery之DOM操作大全

    jQuery属性操作 获取元素属性的语法:attr(name) 例子:$("#img1").attr("src"); 设置元素单个属性的语法:attr(key, ...

  10. 关于读取本地text文件,自动被添加空格的问题

    最近做一个小程序,读取本地指定路径下的text文件,逐行获取text文本然后再进行处理,结果遇到了一个奇葩问题,先插个图片给各位看官 坑:本地text文件中数据为1123/10(数据反复检查无空格,换 ...