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. PureMVC(JS版)源码解析(三):Observer类

          上一篇博客中,我们讲到了Notification类(消息类),Notification(消息)是连接观察者(observer)和通知者(notifier)之间的桥梁.这一篇博客,主要是在代 ...

  2. android开发之PreferenceScreen使用详解

    是在惭愧,学习android也有一段时间了,今天才是第一次接触PreferenceScreen.记录下来,与大家分享. 本文参考:http://lovezhou.iteye.com/blog/1020 ...

  3. js中跨域请求原理及2种常见解决方案

    一.同源策略: 说到跨域请求,首先得说说同源策略: 1995年,同源政策是由 Netscape 公司引入浏览器的.目前,所有浏览器都实行了这个政策. 同源策略是浏览器的一种安全策略,所谓同源是指,域名 ...

  4. 卸载AMH 5.0面板的具体办法

    安装AMH 5.0面板只有YES.NO和EXIT,和AMH 4.X的安装.卸载.退出有点不同,那么如何卸载AMH 5.0面板呢? 1.root登录ssh 2.输入如下命令: killall php-f ...

  5. JDK7 HashMap源码分析

    本文基于JDK1.7.0_79的版本进行分析. 注释比较详细. 若有不明白的地方可以指出, 我再进行细化. public class HashMap<K,V> extends Abstra ...

  6. VS2015+TFS2015源代码管理

    使用Visual Studio连接TFS

  7. jQuery Validate 插件

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  8. JOSN对象与JSON字符串的相互转化

    前端在与服务端通信时.会与JSON JSON字符串经常打交道. 什么是JSON?  如果不太清楚可以点击这里 服务端传过来的数据一般都是一串字符串,jQuery AJAX中的success函数的第一个 ...

  9. 程序员带你十天快速入门Python,玩转电脑软件开发(四)

    本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...

  10. PHP之APC缓存详细介绍

    1.APC缓存简介 APC,全称是Alternative PHP Cache,官方翻译叫"可选PHP缓存".它为我们提供了缓存和优化PHP的中间代码的框架. APC的缓存分两部分: ...