此题有多种做法。

使用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-二分答案+二分图匹配的更多相关文章

  1. POJ 2112 Optimal Milking (二分 + 最大流)

    题目大意: 在一个农场里面,有k个挤奶机,编号分别是 1..k,有c头奶牛,编号分别是k+1 .. k+c,每个挤奶机一天最让可以挤m头奶牛的奶,奶牛和挤奶机之间用邻接矩阵给出距离.求让所有奶牛都挤到 ...

  2. POJ 2112 Optimal Milking (二分+最短路+最大流)

    <题目链接> 题目大意: 有K台挤奶机和C头奶牛,都被视为物体,这K+C个物体之间存在路径.给出一个 (K+C)x(K+C) 的矩阵A,A[i][j]表示物体i和物体j之间的距离,有些物体 ...

  3. POJ 2112 Optimal Milking(Floyd+多重匹配+二分枚举)

    题意:有K台挤奶机,C头奶牛,每个挤奶机每天只能为M头奶牛服务,下面给的K+C的矩阵,是形容相互之间的距离,求出来走最远的那头奶牛要走多远   输入数据: 第一行三个数 K, C, M  接下来是   ...

  4. Poj 2112 Optimal Milking (多重匹配+传递闭包+二分)

    题目链接: Poj 2112 Optimal Milking 题目描述: 有k个挤奶机,c头牛,每台挤奶机每天最多可以给m头奶牛挤奶.挤奶机编号从1到k,奶牛编号从k+1到k+c,给出(k+c)*(k ...

  5. POJ 2112 Optimal Milking (二分+最短路径+网络流)

    POJ  2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K To ...

  6. POJ 2112 Optimal Milking (二分 + floyd + 网络流)

    POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C ...

  7. POJ 2112—— Optimal Milking——————【多重匹配、二分枚举答案、floyd预处理】

    Optimal Milking Time Limit:2000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Sub ...

  8. poj 2112 Optimal Milking (二分图匹配的多重匹配)

    Description FJ has moved his K ( <= K <= ) milking machines <= C <= ) cows. A ..K; the c ...

  9. POJ 2112 Optimal Milking (Dinic + Floyd + 二分)

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 19456   Accepted: 6947 ...

  10. POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )

    题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...

随机推荐

  1. 吉特日化MES-日化行业原料仓库所见问题汇总

    2018年工作主要面向的是日化行业,其中包括日化生产以及日化生产原料仓库,和以往接触到仓库有点不一样在于日化行业原料的特性问题,日化行业的原料基本以粉尘和液体为主. 1. 原料的形态上: 日化行业原料 ...

  2. 【C#复习总结】垃圾回收机制(GC)1

    摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...

  3. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  4. linux上搭建svn服务器

    1.检查当前版本,没有的话用yum安装rpm -qa subversion 2.安装yum install subversion -y 2.建库mkdir -p /home/svn/projectsv ...

  5. 使用模块PIL 生成 随机验证码

    --------------默认自己无能,无疑是给失败制造机会!你认为自己是什么样的人,就将成为什么样的人. 要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创 ...

  6. Mike and palindrome CodeForces - 798A

    题目链接 一个简单的题目,但是却很少有人可以一次AC,比如我就瞎写wa了一次... 写本博算个教训录吧. 题目给出一个字符串,让你严格的改变一个字符使改变后的字符串是一个回文串. 回文串不用解释了.不 ...

  7. python文件读和写

    fileHandle = open ( 'G:/qqfile/1.txt','w' )fileHandle.write('abcd')#写文件 地址要用反斜杠fileHandle.close() fi ...

  8. 【kindle笔记】之 《黑客微百科》-2018-6-17

    前段时间复习六级的时候,从图书馆看到一本书,然后带回来了.今天开始读.今天是2018年6月17日. 严格来讲,一本不算kindle笔记的笔记,不过广义的啃豆笔记了解一下.哈哈. 首页说到的黑客理念是: ...

  9. 解决selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

    解决方案: 1.查看浏览器当前版本:chrome://version/. 2.到https://sites.google.com/a/chromium.org/chromedriver/downloa ...

  10. yum 命令

    yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 基於RPM包管理,能够从指定的服务器自动下载RPM包 ...