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

题解:题意是真的恶心,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. 内置函数:max 用法

    内置函数——max Python max内置函数 max(iterable, *[, key, default]) max(arg1, arg2, *args[, key]) Return the l ...

  2. Eclipse解决JSP页面乱码问题

    解决方案 1.首先选择 Window  -->  Preferences  -->  General-->  Content Types --> text (点击左边的+,显示 ...

  3. SQL模糊查找

    编辑器加载中... /*********************实现模糊查找**************************/ SELECT [UserId] ,[UserName] ,[User ...

  4. Excel 查找某一列中包含指定字符的单元格

    网上查找相关内容,个人感觉是另一种形式的过滤喽.有的说用FIND,有的用高级筛选.我查找时如下: 1.新拉一列,标注公式“=ISNUMBER(FIND("宣",B2))”,然后拉至 ...

  5. 分布式计算开源框架Hadoop入门实践(三)

    Hadoop基本流程 一个图片太大了,只好分割成为两部分.根据流程图来说一下具体一个任务执行的情况. 在分布式环境中客户端创建任务并提交. InputFormat做Map前的预处理,主要负责以下工作: ...

  6. 版本控制系统Subversion

    系统提供撤销的功能对我们实际开发中特别重要.改动后撤销几乎也是我们每个人经常做的事情.再多人进行同一个项目的开发或者测试的时候,版本的唯一性(类似于临界区资源),也就是说A 和B 两个人协同工作的时候 ...

  7. python中编写带参数decorator

    考察上一节的 @log 装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发 ...

  8. Docker容器技术-基础与架构

    一.什么是容器 容器是对应用程序及其依赖关系的封装. 1.容器的优点 容器与主机的操作系统共享资源,提高了效率,性能损耗低 容器具有可移植性 容器是轻量的,可同时运行数十个容器,模拟分布式系统 不必花 ...

  9. 跨平台移动开发 Xuijs超轻量级的框架 Dom与Event简洁代码实现文本展开收起

    Dom与Event简洁代码实现文本展开收起 Xuijs超轻量级的框架 Dom与Event实现文本展开收起 效果图 示例代码 <!DOCTYPE html PUBLIC "-//W3C/ ...

  10. Android系统--灯光系统驱动编写

    Android系统开发--Android灯光系统tiny4412_led_class驱动编写 框架分析 led_classdev_4412结构体 创建led_classdev_4412结构体 分配结构 ...