poj2112:http://poj.org/problem?id=2112

题意:K台挤奶机器,C头牛,K不超过30,C不超过200,每台挤奶机器最多可以为M台牛工作,给出这些牛和机器之间,牛和牛之间,机器与机器之间的距离,在保证让最多的牛都有机器挤奶的情况下,给出其中最长的一头牛移动的距离的最小值。

题解:首先用Floyd求出任意两点之间的最短距离,然后再用二分法限定最多的移动距离d,在求最大流时,搜索增广路的时候同时也判断距离有没有超过d就行了。

 #include<cstring>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int map[][];
const int INF=;
struct Node{
int c;
int f;
}ma[][];
int m,c,knum,pre[];
int sx,se;
void Floy(){
for(int k=;k<=knum+c;k++)
for(int i=;i<=c+knum;i++)
for(int j=;j<=c+knum;j++){
if(k!=i&&i!=j&&k!=j&&map[i][k]+map[k][j]<map[i][j])
map[i][j]=map[i][k]+map[k][j];
}
}
bool BFS(){
memset(pre,,sizeof(pre));
queue<int>Q;
Q.push(sx);
pre[sx]=;
while(!Q.empty()){
int d=Q.front();
Q.pop();
for(int i=;i<=knum+c+;i++){
if(!pre[i]&&ma[d][i].c-ma[d][i].f){
pre[i]=pre[d]+;
Q.push(i);
}
}
}
return pre[se]!=;
}
int dinic(int pos,int flow){
int f=flow;
if(pos==se)
return flow;
for(int i=;i<=c+knum+;i++){
if(ma[pos][i].c-ma[pos][i].f&&pre[i]==pre[pos]+){
int a=ma[pos][i].c-ma[pos][i].f;
int t=dinic(i,min(a,flow));
ma[pos][i].f+=t;
ma[i][pos].f-=t;
flow-=t;
if(flow<=)break;
}
}
if(f-flow<=)pre[pos]=-;
return f-flow;
}
int sum(){
int s=;
while(BFS())
s+=dinic(sx,INF);
return s;
}
void build(int maxn){
memset(ma,,sizeof(ma));
for(int i=knum+;i<=knum+c;i++)
ma[][i].c=;
for(int i=;i<=knum;i++)
ma[i][se].c=m;
for(int i=knum+;i<=c+knum;i++)
for(int j=;j<=knum;j++){
if(map[i][j]<=maxn)
ma[i][j].c=;
}
}
int dinic2(int maxn) {
int maxflow;
int low=,mid,up=maxn;
while(low<=up){
mid=(low+up)>>;
build(mid);
maxflow=;
maxflow=sum();
if(maxflow<c)low=mid+;
else
up=mid-;
}
return up+;
}
int main(){
int maxn;
while(~scanf("%d%d%d",&knum,&c,&m)){
sx=;se=knum+c+;
maxn=;
for(int i=;i<=knum+c;i++)
for(int j=;j<=knum+c;j++){
scanf("%d",&map[i][j]);
if(map[i][j]==)
map[i][j]=INF;
}
Floy();
for(int i=;i<=knum+c;i++)
for(int j=;j<=knum+c;j++)
if(map[i][j]<INF&&map[i][j]>maxn)
maxn=map[i][j]; printf("%d\n",dinic2(maxn)); }
}

Optimal Milking的更多相关文章

  1. Optimal Milking 分类: 图论 POJ 最短路 查找 2015-08-10 10:38 3人阅读 评论(0) 收藏

    Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 13968 Accepted: 5044 Case ...

  2. POJ2112 Optimal Milking (网络流)(Dinic)

                                             Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K T ...

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

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

  4. poj Optimal Milking

    Optimal Milking 题目: 有K个机器.C仅仅牛.要求求出最全部牛到各个产奶机的最短距离.给出一个C+K的矩阵,表示各种标号间的距离. 而每一个地方最多有M仅仅牛. 算法分析: 二分+最短 ...

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

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

  6. 题解 最优的挤奶方案(Optimal Milking)

    最优的挤奶方案(Optimal Milking) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 农场主 John 将他的 K(1≤K≤30)个挤奶器运到牧场,在那里有 C(1≤C≤20 ...

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

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

  8. POJ2112 Optimal Milking

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 17811   Accepted: 6368 ...

  9. Optimal Milking POJ - 2112 (多重最优匹配+最小费用最大流+最大值最小化 + Floyd)

      Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 19347   Accepted: 690 ...

  10. P3097 [USACO13DEC]最优挤奶Optimal Milking

    P3097 [USACO13DEC]最优挤奶Optimal Milking 题意简述:给定n个点排成一排,每个点有一个点权,多次改变某个点的点权并将最大点独立集计入答案,输出最终的答案 感谢@zht4 ...

随机推荐

  1. VC++ 响应回车键的2种方法

    众所周知,VC++响应回车键经常用的方法是利用 BOOL PreTranslateMessage(MSG* pMsg) 截取回车键消息,如: if (pMsg->message == WM_KE ...

  2. Linux Shell删除某一个目录下的所有文件夹(保留其他文件)

    #!/bin/bash direc=$(pwd) for dir2del in $direc/* ; do if [ -d $dir2del ]; then rm -rf $dir2del fi do ...

  3. Linux安装QQ 2017

    网上有很多wineQQ,是基于2012或者2013做的,然而当安装好后登录他会提示版本过来,我在优麒麟的应用商店里找到了一个基于国际版QQ的Wine版本,这里说下安装过程. 先上两张成果图: 下载地址 ...

  4. 一个玩具程序——测试密码强度(pure C)

    替人写的C语言作业… 介绍: 程序名称:密码强度检测程序 注释风格:doxygen 测试环境:linux3.6, gcc4.7window7, vs2012 已知问题:1. 算法与参考链接不一致,结果 ...

  5. 内核增加支持yaffs2错误问题汇总

    Q1: fs/yaffs2/yaffs_mtdif2.c:xxx: error: 'struct xxx1' has no member named 'fun_xxx' A1:比对fun_xxx和st ...

  6. extSourceStat_7Day_Orders.php

    <?php /** Log文件格式2012/7/4 列号 字段含义 取值 ------------------------------------------------------------ ...

  7. [GDI+] C# ImageDown帮助类教程与源码下载 (转载)

    点击下载 ImageDown.zip 1.下载图片到本地代码如下 /// <summary> /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:[url=h ...

  8. Android 输入法键盘和activity页面遮挡问题解决

    本文主要介绍Android中如何解决输入法键盘和activity页面遮挡的问题. 总结: 不希望遮挡设置activity属性android:windowSoftInputMode="adju ...

  9. 黑马入学基础测试(三)求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55

    .获得用户的输入 计算      3打印就行了.   这里用到了java.util.Scanner   具体API  我就觉得不常用.解决问题就ok了.注意的是:他们按照流体的方式读取.而不是刻意反复 ...

  10. orm fluentdata使用相关文章

    微型orm fluentdata使用:http://www.360doc.com/content/12/1228/23/9200790_256885743.shtml