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求出来点之间的最短路??(不晓得给 ...
随机推荐
- 【Java面试题】59 Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math类中提供了三个与取整有关的方法:ceil.floor.round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11. ...
- Oracle中查询主键、外键、sequence、表基本信息等
一次看到某张表中有几条ID相同的数据,通过业务确认该ID应该是唯一的,后来找到原因,因为DBA未对该表建主键. 现在DBA工作比较忙,我们项目有时需要新增或者修改数据库表结构时,可能需要对表结构进行确 ...
- kafka学习之-文件存储机制
Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...
- 最新版ChemDraw 15.1 免费获取下载
ChemDraw 15.1 Pro是最新版的ChemOffice套件的个人生产力工具,它可以帮助科学家有效地捕捉和分享工作内容,通过可视化功能对结果获得更深入的了解.现在为大家带来好消息,ChemOf ...
- Navicat for MySQL使用手记(上)--创建数据库和表
在管理MySQL数据库的图形化工具中,最为熟知的就是phpMyAdmin和Mysql-Front了,今天跟大家分享另外一个管理mysql数据库的另外一个利器---Navicat MySQL. Navi ...
- mysql数据库使用mysqldump工具针对一个数据库备份,使用--databases选项与不使用该参数的区别
需求描述: 今天在做mysqldump备份某个数据库的试验,在备份某个数据库的时候可以使用 --databases参数,也可以直接进行某个数据库的备份,那么这里记录下两者的区别 操作过程: 1.使用- ...
- c++虚函数表 Brew VTBL
参考:http://blog.csdn.net/haoel/article/details/1948051/ BREW VTBL:http://blog.chinaunix.net/uid-51740 ...
- 超全面的JavaWeb笔记day08<Tomcat&Web应用&HTTP协议>
1.常用软件体系结构 BS:浏览器/服务器 CS:客户端/服务器 WEB资源 动态资源 JSP Servlet 静态资源 html 常用服务器 Tomcat Weblogic Resin JBOSS ...
- glob模块--查询一个文件名列表
''' 在python中,glob模块是用来查找匹配的文件的 在查找的条件中,需要用到Unix shell中的匹配规则: * : 匹配所所有 ? : 匹配一个字符 *.* : 匹配如:[hello.t ...
- MySQL性能优化(三)-- 索引
一.什么是索引及索引的特点 索引是一种数据结构 索引的特点:查找速度快,排好序,数据结构 索引的数据结构类型有:BTREE索引和HASH索引,下面展示的是BTREE索引. BTREE:balance ...