Optimal Milking---poj2112(多重匹配+Floyd+二分)
题目链接:http://poj.org/problem?id=2112
题意:K个挤奶器(编号1~K),每个挤奶器每天最多供M头奶牛。共有C头奶牛(编号K+1~K+C)。挤奶器和奶牛间有不同长度的路。
编写程序,寻找一个方案,安排每头牛到某个挤奶器挤奶,并使得C头奶牛需要走的所有路程的最大路程最小。答案可以用二分来找;
一对多的二分图的多重匹配。二分图的多重匹配算法的实现类似于匈牙利算法,对于集合x中的元素xi,找到一个与其相连的元素yi后(本题中要满足相连并且距离要小于某个距离),检查匈牙利算法的两个条件是否成立,若yi未被匹配,则将
xi,yi匹配。否则,如果与yi匹配的元素已经达到上限,那么在所有与yi匹配的元素中选择一个元素,检查是否能找到一条增广路径,如果能,则让出位置,让xi与yi匹配。
Cows can traverse several paths on the way to their milking machine. 这句话说明了牛可以通过任何路径到达挤奶机,所以要用Floyd更新距离;
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<string>
#include<stack>
#include<map>
using namespace std;
#define N 1510
#define INF 0x3f3f3f3f
#define met(a, b) memset(a, b, sizeof(a)) int G[N][N], vis[N];
int M, K, C; struct node
{
int k;
int a[N];
}Linky[N]; void Floyd()
{
for(int k=; k<=K+C; k++)
for(int i=; i<=K+C; i++)
for(int j=; j<=K+C; j++)
G[i][j] = min(G[i][j], G[i][k]+G[k][j]);
} bool Find(int u, int Limit)
{
for(int i=; i<=K; i++)
{
if( !vis[i] && G[u][i] <= Limit)///距离应在Limit范围之内;
{
vis[i] = ;
if( Linky[i].k < M )///当与i相连的点的个数小于M个时,直接放进来;
{
Linky[i].a[ Linky[i].k++ ] = u;
return true;
}
for(int j=; j<Linky[i].k; j++)///否则就看是否能替换掉其中的一个
{
if(Find(Linky[i].a[j], Limit))
{
Linky[i].a[j] = u;
return true;
}
}
}
}
return false;
} bool Hungary(int Limit)
{
met(Linky, );
for(int i=K+; i<=K+C; i++)
{
met(vis, );
if( !Find(i, Limit) )///当有一个牛找不到与之相对的挤奶机时,就说明这个Limit不符合条件;
return false;
}
return true;
} int solve()
{
int L = , R = INF, ans = INF;
while(L <= R)
{
int Mid = (L+R)/;
if(Hungary(Mid))
{
ans = Mid;///不断更新符合条件的答案;
R = Mid-;
}
else
L = Mid+;
}
return ans;
} int main()
{
while(scanf("%d %d %d", &K, &C, &M) != EOF)
{
met(G, ); for(int i=; i<=K+C; i++)
{
for(int j=; j<=K+C; j++)
{
scanf("%d", &G[i][j]);
if(G[i][j] == ) G[i][j] = INF;
}
} Floyd();///Floyd求出,各点之间的距离; int ans = solve(); printf("%d\n", ans);
}
return ;
}
Optimal Milking---poj2112(多重匹配+Floyd+二分)的更多相关文章
- POJ 2112—— Optimal Milking——————【多重匹配、二分枚举答案、floyd预处理】
Optimal Milking Time Limit:2000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Sub ...
- POJ2112 Optimal Milking —— 二分图多重匹配/最大流 + 二分
题目链接:https://vjudge.net/problem/POJ-2112 Optimal Milking Time Limit: 2000MS Memory Limit: 30000K T ...
- POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )
题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...
- POJ 3189——Steady Cow Assignment——————【多重匹配、二分枚举区间长度】
Steady Cow Assignment Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- Poj 2112 Optimal Milking (多重匹配+传递闭包+二分)
题目链接: Poj 2112 Optimal Milking 题目描述: 有k个挤奶机,c头牛,每台挤奶机每天最多可以给m头奶牛挤奶.挤奶机编号从1到k,奶牛编号从k+1到k+c,给出(k+c)*(k ...
- poj 2112 Optimal Milking (二分图匹配的多重匹配)
Description FJ has moved his K ( <= K <= ) milking machines <= C <= ) cows. A ..K; the c ...
- POJ3189_Steady Cow Assignment(二分图多重匹配/网络流+二分构图)
解题报告 http://blog.csdn.net/juncoder/article/details/38340447 题目传送门 题意: B个猪圈,N头猪.每头猪对每一个猪圈有一个惬意值.要求安排这 ...
- POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】
Jamie's Contact Groups Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- N - Optimal Milking - POJ 2112(二分图多重匹配+Floyd+二分搜索)
题意:有K太挤奶机,C头奶牛,每个挤奶机每天只能为M头奶牛服务,下面给的K+C的矩阵,是形容相互之间的距离,求出来走最远的那头奶牛要走多远 分析:应该先使用floyd求出来点之间的最短路??(不晓得给 ...
随机推荐
- Unity在协程内部停止协程自身后代码执行问题
当在协程内部停止自身后,后面的代码块还会继续执行,直到遇到yield语句才会终止. 经测试:停止协程,意味着就是停止yield,所以在停止协程后,yield之后的语句也就不会执行了. 代码如下: us ...
- 【matlab】运动目标检测之"背景差分算法“
clear; clc; i1=imread('D:\Work\1.png'); i2=imread('D:\Work\2.png'); i1=rgb2gray(i1); i2=rgb2gray(i2) ...
- Windows中目录及文件路径太长无法删除的解决方法
用windows自带的命令解决 win7以上的系统有 robocopy 命令 http://www.jianshu.com/p/95a269951a1b 导致目录太深的原因就是用node中的node ...
- List 和 ObservableCollection的区别
在WPF中绑定一个集合的时候,比如:DataGrid.ItemsSource = new List<T>(); 这样的操作,会存在当数据行新增或者删除的时候不会得到及时的通知来刷新界面,而 ...
- [深入理解Android卷一全文-第四章]深入理解zygote
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的所有内容. ...
- Linux nmon 命令
nmon 是一个资源监控工具,能够监控 Linux 系统资源( cpu,memory,network,disks )的使用情况,常见用法如下: [root@localhost ~]$ yum inst ...
- iPad UIPopoverController弹出窗口的位置和坐标
本文转载至:http://blog.csdn.net/chang6520/article/details/7921181 TodoViewController *contentViewControll ...
- const关键字浅析
1 const变量 const double PI = 3.14159; 定义之后不能被修改,所以定义时必须初始化. const int i, j = 0; // error: i is unini ...
- 关于Android图片资源瘦身的奇思妙想
版权声明:本文由况鹰原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/77 来源:腾云阁 https://www.qcloud ...
- iconfont阿里爸爸做的开源图库
iconfont 三种使用姿势 1.unicode格式 优点 兼容性最好,支持ie6+ 支持按字体的方式去动态调整图标大小,颜色等等 缺点 不支持多色图标 在不同的设备浏览器字体的渲染会略有差别,在不 ...