Steady Cow Assignment---poj3189(多重匹配+二分)
题目链接: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(多重匹配+二分)的更多相关文章
- POJ3189 Steady Cow Assignment —— 二分图多重匹配/最大流 + 二分
题目链接:https://vjudge.net/problem/POJ-3189 Steady Cow Assignment Time Limit: 1000MS Memory Limit: 65 ...
- POJ 3189——Steady Cow Assignment——————【多重匹配、二分枚举区间长度】
Steady Cow Assignment Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- POJ3189_Steady Cow Assignment(二分图多重匹配/网络流+二分构图)
解题报告 http://blog.csdn.net/juncoder/article/details/38340447 题目传送门 题意: B个猪圈,N头猪.每头猪对每一个猪圈有一个惬意值.要求安排这 ...
- POJ3189:Steady Cow Assignment(二分+二分图多重匹配)
Steady Cow Assignment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7482 Accepted: ...
- Poj 3189 Steady Cow Assignment (多重匹配)
题目链接: Poj 3189 Steady Cow Assignment 题目描述: 有n头奶牛,m个棚,每个奶牛对每个棚都有一个喜爱程度.当然啦,棚子也是有脾气的,并不是奶牛想住进来就住进来,超出棚 ...
- POJ3189 Steady Cow Assignment
Steady Cow Assignment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6817 Accepted: ...
- POJ 2289(多重匹配+二分)
POJ 2289(多重匹配+二分) 把n个人,分到m个组中.题目给出每一个人可以被分到的那些组.要求分配完毕后,最大的那一个组的人数最小. 用二分查找来枚举. #include<iostream ...
- POJ 3189 Steady Cow Assignment 【二分】+【多重匹配】
<题目链接> 题目大意: 有n头牛,m个牛棚,每个牛棚都有一定的容量(就是最多能装多少只牛),然后每只牛对每个牛棚的喜好度不同(就是所有牛圈在每个牛心中都有一个排名),然后要求所有的牛都进 ...
- Steady Cow Assignment POJ - 3189 (最大流+匹配)
Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns which ...
随机推荐
- java的对象锁和类锁
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...
- java List分批处理
java List分批处理,例如对List中的数据进行批量插入. 方法一: /** * ClassName:Test List分批处理 * @author Joe * @version * @sinc ...
- java jni调用
http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html
- SaltStack 批量分发文件
这里演示如何将 salt-master 上的文件批量分发到多台 salt-minion,步骤如下: [root@localhost ~]$ cat /srv/salt/top.sls # 先定义入口配 ...
- session会话保持
#coding=utf-8 from flask import Flask from flask import request from flask import redirect from flas ...
- 如何创建圆角 UITextField 与内阴影
本文转自http://www.itstrike.cn/Question/9309fbd6-ef5d-4392-b361-a60fd0a3b18e.html 主要学习如何创建内阴影 我自定义 UITex ...
- Clock skewdetected. Your build may be incomplete.
解决方法: find . -type f | xargs -n touch make clean make
- IOS 怎么用UIScrollView来滚动和缩放他的内容第一篇
本篇文章来自于互联网资料翻译 UIScrollView是在IOS最有用的控件之一.他是一个来展现超过一个屏幕的内容的很好的方式.下面有很多的技巧来使用他. 这篇文章就是关于UIScrollView的, ...
- SQL Server 优化总结
1.作为过滤条件字段的数据表,在拼接语句尽量优先拼接,以提升查询效率
- package.json字段全解(转)
Name 必须字段. 小提示: 不要在name中包含js, node字样: 这个名字最终会是URL的一部分,命令行的参数,目录名,所以不能以点号或下划线开头: 这个名字可能在require()方法中被 ...