POJ 2112-Optimal Milking-二分答案+二分图匹配
此题有多种做法。
使用floyd算法预处理最短路,二分答案,对于每一个mid,如果距离比mid小就连边,
注意把每个机器分成m个点。这样跑一个最大匹配,如果都匹配上就可以减小mid值。
用的算法比较多但是条理很清晰
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxn = ;
const int INF = 0x3f3f3f3f;
int K,C,M;
int Map[maxn][maxn];
int path[maxn][*maxn]; int floyd()
{
int i,j,h,t = K+C;
for(h=;h<=t;h++)
for(i=;i<=t;i++)
for(j=;j<=t;j++)
if(Map[i][j] > Map[i][h]+Map[h][j])
Map[i][j] = Map[i][h]+Map[h][j];
} int BuildGraph(int mid)
{
memset(path,false,sizeof path);
for(int i=;i<=C;i++)
{
for(int j=;j<=K;j++)
{
if(Map[K+i][j] <= mid)
for(int h=;h<=M;h++)
{
path[i][h+(j-)*M] = true;
}
}
}
} int linker[*maxn];
bool used[*maxn]; int Dfs(int u)
{
for(int v=;v<=K*M;v++)
{
if(path[u][v] && !used[v])
{
used[v] = true;
if(linker[v] == - || Dfs(linker[v]))
{
linker[v] = u;
return true;
}
}
}
return false;
} bool MaxMatch()
{
memset(linker,-,sizeof linker);
for(int i=;i<=C;i++)
{
memset(used,false,sizeof used);
if(!Dfs(i)) return false;
}
return true;
} void solve()
{
int low = ,high = *(K+C),mid;
while(high > low)
{
mid = (low+high)/;
BuildGraph(mid);
if(MaxMatch()) high = mid;
else low = mid+;
}
printf("%d\n",low);
} int main()
{
//freopen("input.in","r",stdin);
while(~scanf("%d%d%d",&K,&C,&M))
{
for(int i=;i<=K+C;i++)
{
for(int j=;j<=K+C;j++)
{
scanf("%d",&Map[i][j]);
if(Map[i][j] == ) Map[i][j] = INF;
}
}
floyd();
solve();
}
}
POJ 2112-Optimal Milking-二分答案+二分图匹配的更多相关文章
- POJ 2112 Optimal Milking (二分 + 最大流)
题目大意: 在一个农场里面,有k个挤奶机,编号分别是 1..k,有c头奶牛,编号分别是k+1 .. k+c,每个挤奶机一天最让可以挤m头奶牛的奶,奶牛和挤奶机之间用邻接矩阵给出距离.求让所有奶牛都挤到 ...
- POJ 2112 Optimal Milking (二分+最短路+最大流)
<题目链接> 题目大意: 有K台挤奶机和C头奶牛,都被视为物体,这K+C个物体之间存在路径.给出一个 (K+C)x(K+C) 的矩阵A,A[i][j]表示物体i和物体j之间的距离,有些物体 ...
- POJ 2112 Optimal Milking(Floyd+多重匹配+二分枚举)
题意:有K台挤奶机,C头奶牛,每个挤奶机每天只能为M头奶牛服务,下面给的K+C的矩阵,是形容相互之间的距离,求出来走最远的那头奶牛要走多远 输入数据: 第一行三个数 K, C, M 接下来是 ...
- Poj 2112 Optimal Milking (多重匹配+传递闭包+二分)
题目链接: Poj 2112 Optimal Milking 题目描述: 有k个挤奶机,c头牛,每台挤奶机每天最多可以给m头奶牛挤奶.挤奶机编号从1到k,奶牛编号从k+1到k+c,给出(k+c)*(k ...
- POJ 2112 Optimal Milking (二分+最短路径+网络流)
POJ 2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit: 2000MS Memory Limit: 30000K To ...
- POJ 2112 Optimal Milking (二分 + floyd + 网络流)
POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C ...
- POJ 2112—— Optimal Milking——————【多重匹配、二分枚举答案、floyd预处理】
Optimal Milking Time Limit:2000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Sub ...
- poj 2112 Optimal Milking (二分图匹配的多重匹配)
Description FJ has moved his K ( <= K <= ) milking machines <= C <= ) cows. A ..K; the c ...
- POJ 2112 Optimal Milking (Dinic + Floyd + 二分)
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 19456 Accepted: 6947 ...
- POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )
题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...
随机推荐
- centos 7 java1.8安装
java安装 检查版本信息,如果版本小于1.8,执行以下命令 java -version java version "1.8.0_144"Java(TM) SE Runtime E ...
- Jmeter性能与接口自动化实战
本书可以作为工具书,也可以作为jmeter疑难杂症的良方!各位同学在jmeter学习中遇到的常见难题,在本文中都可以检索到答案. 大纲如下: ☞点击这里,获取本书
- 如何利用snmp协议发现大型复杂环境的网络拓扑
参考文献:http://blog.51cto.com/13769225/2121431 获取指标参考下图: 1.取接口描述(指定VLAN号) 命令:snmpwalk -v 2c -c Cvicse12 ...
- 543A - Writing Code(二维动态规划)
题意:现在要写m行代码,总共有n个文件,现在给出第i个文件每行会出现v[i]个bug,问你在bug少于b的条件下有多少种安排 分析:定义dp[i][j][k],i个文件,用了j行代码,有k个bug 状 ...
- js变量以及其作用域
一.变量的类型 Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: ...
- Podfile文件用法详解
https://www.jianshu.com/p/b8b889610b7e 2018.01.09 15:51* 字数 2343 阅读 6263评论 3喜欢 34 前言 iOS开发会经常用到cocoa ...
- 关于iframe页面里的重定向问题
最近公司做的一个功能,使用了iframe,父页面内嵌子页面,里面的坑还挺多的,上次其实就遇到过,只不过今天在此描述一下. 请允许我画个草图: 外层大圈是父级页面,里层是子级页面,我们是在父级引用子级页 ...
- Python_函数的初识、函数的返回值、函数的参数
1.函数的初识 def关键字 空格 函数名(与变量名命名规则相同):英文冒号 函数体 执行函数:函数名+() 函数是以功能为导向的. def login(): pass def register(): ...
- echarts使用笔记三:柱子对比
app.title = '坐标轴刻度与标签对齐'; option = { title : { //标题 x : 'center', y : 5, text : '对比图' //换行用 \n }, le ...
- Oracle NVL空值处理函数
--NVL空值处理函数 --需求:显示价格表中业主类型ID为1的价格记录 如果上限值为null,则显示9999999 ) from dual; select * from t_pricetable ) ...