题意:K个产奶机,C头奶牛,每个产奶机最多可供M头奶牛使用;并告诉了产奶机、奶牛之间的两两距离Dij(0<=i,j<K+C)。

问题:如何安排使得在任何一头奶牛都有自己产奶机的条件下,奶牛到产奶机的最远距离最短?最短是多少?

建图 源点    -> 每头牛  ->   每个机器 ->   汇点

权             1                ?                  M

二分 找最远距离 里面最小的

二分距离  if dis[i][j]<dis   牛到机器的流量 1  也就是权

 #include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue> using namespace std; #define MAXN 300
#define inf 100000000
int k,c,m,n;
int S,T; //我把源点和汇点 设成 0 n+1
int dis[MAXN][MAXN];
int z[MAXN][MAXN];
int vis[MAXN]; void floyed()
{
int i,j,k; for(k=;k<=n;k++)
{
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
void makemap(int w)
{
int i,j;
memset(z,,sizeof(z)); //反向边这边已经有了
for(i=k+;i<=n;i++)
z[][i]=;
for(i=;i<=k;i++)
z[i][n+]=m;
for(i=k+;i<=n;i++)
for(j=;j<=k;j++)
{
if(dis[i][j]<=w)
z[i][j]=;
}
}
int bfs()
{
memset(vis,-,sizeof(vis));
vis[S]=;
queue<int>q1;
q1.push(S);
int i;
while(!q1.empty())
{
int now=q1.front();
q1.pop();
for(i=;i<=n+;i++)
{
if(vis[i]<&&z[now][i])
{
q1.push(i);
vis[i]=vis[now]+;
}
}
}
return vis[T]!=-;
}
int dfs(int u,int w)
{
int ans=;
if(u==T)
return w;
int i;
for(i=;i<=n+;i++)
{
if(vis[i]==vis[u]+&&z[u][i])
{
int b=dfs(i,min(z[u][i],w-ans));
z[u][i]-=b;
z[i][u]+=b;
ans=ans+b;
}
}
return ans;
} int main()
{
while(scanf("%d%d%d",&k,&c,&m)!=EOF)
{
int i,j;
n=k+c; for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
scanf("%d",&dis[i][j]);
if(dis[i][j]==)
dis[i][j]=inf;
}
floyed();
int L,R;
L=;
R=inf;
S=;
T=n+;
int ans=;
while(L<=R)
{
int w=,mid;
mid=(L+R)>>;
makemap(mid);
while(bfs())
w+=dfs(,inf);
if(w>=c)
{
ans=mid;
R=mid-;
}
else
L=mid+;
} printf("%d\n",ans);
} return ;
}

网络流 POJ2112的更多相关文章

  1. 网络流相关知识点以及题目//POJ1273 POJ 3436 POJ2112 POJ 1149

    首先来认识一下网络流中最大流的问题 给定一个有向图G=(V,E),把图中的边看做成管道,边权看做成每根管道能通过的最大流量(容量),给定源点s和汇点t,在源点有一个水源,在汇点有一个蓄水池,问s-t的 ...

  2. POJ2112 Optimal Milking---二分+Floyd+网络流

    题目链接: https://vjudge.net/problem/POJ-2112 题目大意: k个机器,每个机器最多服务m头牛. c头牛,每个牛需要1台机器来服务. 告诉你牛与机器每个之间的直接距离 ...

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

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

  4. poj2112(网络流-最大流+二分)

    题意:给你k个挤奶器,c头牛,每个挤奶器能放m头牛,问你奶牛需要走的最大距离最小是多少: 解题思路:因为最大距离最小,也就是求最小的距离满足所有牛都能到,所以我们先用floyd跑最短路,把所有点之间的 ...

  5. [Poj2112][USACO2003 US OPEN] Optimal Milking [网络流,最大流][Dinic+当前弧优化]

    题意:有K个挤奶机编号1~K,有C只奶牛编号(K+1)~(C+K),每个挤奶机之多能挤M头牛,现在让奶牛走到挤奶机处,求奶牛所走的最长的一条边至少是多少. 题解:从起点向挤奶机连边,容量为M,从挤奶机 ...

  6. poj2112 网络流+二分答案

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 18083   Accepted: 6460 ...

  7. POJ2391 Ombrophobic Bovines(网络流)(拆点)

                         Ombrophobic Bovines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  8. POJ 2391 Ombrophobic Bovines【二分 网络流】

    题目大意:F个草场,P条道路(无向),每个草场初始有几头牛,还有庇护所,庇护所有个容量,每条道路走完都有时间,问所有奶牛都到庇护所最大时间最小是多少? 思路:和POJ2112一样的思路,二分以后构建网 ...

  9. plain framework 1 网络流 缓存数据详解

    网络流是什么?为什么网络流中需要存在缓存数据?为什么PF中要采用缓存网络数据的机制?带着这几个疑问,让我们好好详细的了解一下在网络数据交互中我们容易忽视以及薄弱的一块.该部分为PF现有的网络流模型,但 ...

随机推荐

  1. 炮(棋盘DP)

    一直以为自己写的就是状态压缩,结果写完才知道是个棋盘dp 首先看一下题目 嗯,象棋 ,还是只有炮的象棋 对于方案数有几种,我第一个考虑是dfs,但是超时稳稳的,所以果断放弃 然后记得以前有过和这个题差 ...

  2. 网页下载Google Play 的App

    前言 当你想在google play上下载某个应用,而无奈手机的系统并没有安装google servicess,此刻是否有些捉急? 本文分享的是一个网站,它可以无需手机而直接通过网页下载Google ...

  3. [No00003B]string格式的日期时间字符串转为DateTime类型

    新建console程序,复制粘贴直接运行: /**/ //using System.Globalization;//代码测试大致时间2015/11/3 15:09:05 //方法一:Convert.T ...

  4. [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天

    导读 在易中天看来,中国教育和中国文化的问题一样,是弱智化.搞坏的原因是什么?是我们的教育评价目标就是"成王败寇"四个字.他明确提出反对励志,反对培优,反对成功学,反对望子成龙.他 ...

  5. java 27 - 5 反射之 通过反射获取成员方法并使用

    类Method:提供关于类或接口上单独某个方法(以及如何访问该方法)的信息. A:获取所有方法 数组 1.getMethods  获取该类包括其父类的公共成员方法 2.getDeclaredMetho ...

  6. Thinkphp大纲——基础参考

    一.ThinkPHP核心文件介绍 ├─ThinkPHP.php 框架入口文件 ├─Common 框架公共文件 ├─Conf 框架配置文件 ├─Extend 框架扩展目录 ├─Lang 核心语言包目录 ...

  7. webpack常用加载器和插件

    css文件加载器: style-loader,css-loader,sass-loader,less-loader //style和css加载器必须放在一起使用,且style必须放前面(style!c ...

  8. iOS多线程之NSThread详解

    在iOS中每个进程启动后都会建立一个主线程(UI线程),这个线程是其他线程的父线程.由于iOS中除了主线程,其他子线程是独立于Cocoa Touch的,所以只有主线程可以更新UI界面.iOS多线程的使 ...

  9. Android入门篇2-activity调用跟数据传递

    一.activity调用 假设ActivityTest调用SecondActivity 1.显示调用 button1.setOnClickListener(new View.OnClickListen ...

  10. Win10删除 6个多余文件夹

    下面附上注册表地址,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace ...