此题有多种做法。

使用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. 缓存子系统如何设计(Cachable tag, Memcache/redis support, xml config support, LRU/LFU/本地缓存命中率)

    大家对这段代码肯定很熟悉吧: public List<UserInfo> SearchUsers(string userName) { string cacheKey=string.For ...

  2. 朱晔和你聊Spring系列S1E3:Spring咖啡罐里的豆子

    标题中的咖啡罐指的是Spring容器,容器里装的当然就是被称作Bean的豆子.本文我们会以一个最基本的例子来熟悉Spring的容器管理和扩展点. 阅读PDF版本 为什么要让容器来管理对象? 首先我们来 ...

  3. 修改docker0默认IP地址

    第一步:vim /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.e ...

  4. 启发式合并 splay合并 线段树合并基础

    Gold is everywhen! - somebody 启发式合并 将小的集合一个个插入到大的集合. 每次新集合大小至少比小集合大一倍,因此每个元素最多合并\(\log n\)次,总复杂度为\(n ...

  5. Divide by three, multiply by two CodeForces - 977D (思维排序)

    Polycarp likes to play with numbers. He takes some integer number xx, writes it down on the board, a ...

  6. 使用JavaScript动态刷新页面局部内容

    html页面: <%@page contentType="text/html; charset=Shift_JIS"%><html>    <head ...

  7. 【学习总结】Git学习-参考廖雪峰老师教程五-远程仓库

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

  8. Zabbix appliance One Stop

    Download Zabbix appliancehttps://www.zabbix.com/download_appliance

  9. oracle查询不走索引的一些情况(索引失效)

    Oracle建立索引的目的是为了避免全表扫描,提高查询的效率. 但是有些情况下发现即使建立了索引,但是写出来的查询还是很慢,然后会发现是索引失效导致的,所以需要了解一下那些情况会导致索引失效,即查询不 ...

  10. [转帖]TCP和UDP的135、137、138、139、445端口的作用

    TCP和UDP的135.137.138.139.445端口的作用 https://www.cnblogs.com/IvanChen/p/4500698.html 竟然不知道 端口具体是干什么的.. 如 ...