题目链接:http://poj.org/problem?id=3189

题意:有n头牛,B个牛棚,每头牛对牛棚都有一个喜欢度,接下来输入N*B的矩阵第i行第j列的数x表示:第i头牛第j喜欢的是x;

第i个牛棚最多存Max[i]头牛,最后求牛棚的排名区间,意思就是假如一个牛棚中有最喜欢这个牛棚的牛(那么就是第一喜欢1)和也有最不喜欢这个牛棚的牛(那么就是第B喜欢B),答案就是1--B的区间大小B-1+1,问怎么安排能让这个区间值最小,求最小值;

由于B的取值范围较小,所以可以枚举所有的区间,求符合条件的最小值,由于牛棚里可能不止放一头牛,所以是多重匹配;

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <vector>
#include <map>
#include <string>
#include <set>
using namespace std;
#define N 1005
#define INF 0x3f3f3f3f
#define met(a, b) memset(a, b, sizeof(a))
typedef long long LL; struct node
{
int k, a[N];
}used[N]; int B, n, vis[N];
int G[N][N], Max[N]; bool Find(int u, int L, int R)
{
for(int i=; i<=B; i++)
{
if( !vis[i] && G[u][i]>=L && G[u][i]<=R)///所有的大小应在此范围内;
{
vis[i] = ;
if( used[i].k < Max[i] )
{
used[i].a[ used[i].k++ ] = u;
return true;
}
for(int j=; j<used[i].k; j++)
{
if( Find(used[i].a[j], L, R) )
{
used[i].a[j] = u;
return true;
}
}
}
}
return false;
} bool Hungary(int L, int R)
{
met(used, );
for(int i=; i<=n; i++)
{
met(vis, );
if( !Find(i, L, R) )
return false;
}
return true;
} int main()
{
while(scanf("%d %d", &n, &B) != EOF)
{
met(G, ); for(int i=; i<=n; i++)
{
for(int j=; j<=B; j++)
{
int x;
scanf("%d", &x);
G[i][x] = j;
}
}
for(int i=; i<=B; i++)
scanf("%d", &Max[i]); int L = , R = B, ans = R;
while(L <= R)
{
int i, Mid = (L+R)/; for(i=; i<=B; i++)
{
if( Hungary(i, Mid+i) )///枚举区间大小为Mid+1的值,满足条件时则取其最小值;
break;
}
if(i == B+)
L = Mid+;
else
R = Mid-, ans = Mid+;
}
printf("%d\n", ans);
}
return ;
}

Steady Cow Assignment---poj3189(多重匹配+二分)的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. POJ3189 Steady Cow Assignment

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

  7. POJ 2289(多重匹配+二分)

    POJ 2289(多重匹配+二分) 把n个人,分到m个组中.题目给出每一个人可以被分到的那些组.要求分配完毕后,最大的那一个组的人数最小. 用二分查找来枚举. #include<iostream ...

  8. POJ 3189 Steady Cow Assignment 【二分】+【多重匹配】

    <题目链接> 题目大意: 有n头牛,m个牛棚,每个牛棚都有一定的容量(就是最多能装多少只牛),然后每只牛对每个牛棚的喜好度不同(就是所有牛圈在每个牛心中都有一个排名),然后要求所有的牛都进 ...

  9. Steady Cow Assignment POJ - 3189 (最大流+匹配)

    Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns which ...

随机推荐

  1. java的对象锁和类锁

    在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...

  2. java List分批处理

    java List分批处理,例如对List中的数据进行批量插入. 方法一: /** * ClassName:Test List分批处理 * @author Joe * @version * @sinc ...

  3. java jni调用

    http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html

  4. SaltStack 批量分发文件

    这里演示如何将 salt-master 上的文件批量分发到多台 salt-minion,步骤如下: [root@localhost ~]$ cat /srv/salt/top.sls # 先定义入口配 ...

  5. session会话保持

    #coding=utf-8 from flask import Flask from flask import request from flask import redirect from flas ...

  6. 如何创建圆角 UITextField 与内阴影

    本文转自http://www.itstrike.cn/Question/9309fbd6-ef5d-4392-b361-a60fd0a3b18e.html 主要学习如何创建内阴影 我自定义 UITex ...

  7. Clock skewdetected. Your build may be incomplete.

    解决方法: find . -type f | xargs -n touch make clean make

  8. IOS 怎么用UIScrollView来滚动和缩放他的内容第一篇

    本篇文章来自于互联网资料翻译 UIScrollView是在IOS最有用的控件之一.他是一个来展现超过一个屏幕的内容的很好的方式.下面有很多的技巧来使用他. 这篇文章就是关于UIScrollView的, ...

  9. SQL Server 优化总结

    1.作为过滤条件字段的数据表,在拼接语句尽量优先拼接,以提升查询效率

  10. package.json字段全解(转)

    Name 必须字段. 小提示: 不要在name中包含js, node字样: 这个名字最终会是URL的一部分,命令行的参数,目录名,所以不能以点号或下划线开头: 这个名字可能在require()方法中被 ...