题目大意是:

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

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

 #include <cstdio>
#include <cstring>
#include <queue>
#define _clr(x, y) memset(x, y, sizeof(x))
#define Min(x, y) (x < y ? x : y)
#define INF 0x3f3f3f3f
#define N 1005
using namespace std; int flow[N][N], dist[N][N];
int level[N];
int K, C, M, S, T, ln; void Floyd()
{
for(int k=; k<=ln; k++)
for(int i=;i<=ln; i++) if(dist[i][k]<INF)
for(int j=; j<=ln; j++)
if(dist[i][k]+dist[k][j]<dist[i][j])
dist[i][j] = dist[i][k]+dist[k][j];
} bool bfs()
{
_clr(level, -);
level[S] = ;
queue<int> Q;
Q.push(S);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
for(int i=; i<=T; i++)
{
if(flow[u][i] && level[i]<)
{
level[i] = level[u] + ;
Q.push(i);
}
}
}
return level[T]> ? : ;
} int dfs(int x, int f)
{
int a;
if(x==T) return f;
for(int i=; i<=T; i++)
{
if(flow[x][i] && level[i]==level[x]+ && (a=dfs(i,Min(f,flow[x][i]))))
{
flow[x][i] -= a;
flow[i][x] += a;
return a;
}
}
level[x] = -;
return ;
} __int64 Dinic(int len)
{
// 构建残余网络
_clr(flow, );
for(int i=; i<=K; i++)
flow[S][i] = M;
for(int i=K+; i<=ln; i++)
flow[i][T] = ;
for(int i=; i<=K; i++) // 机器
for(int j=K+; j<=ln; j++) // 奶牛
flow[i][j] = (dist[i][j]<=len); // 求解最大流
__int64 ans=, a=;
while(bfs())
while(a=dfs(,INF)) ans += a;
return ans;
} // 二分求解满足条件的最小解
int Slove()
{
int l=, r=;
while(l<=r)
{
int mid = (l+r)>>;
if(Dinic(mid)>=C) r = mid-;
else l = mid+;
}
return l;
}
int main()
{
while(~scanf("%d%d%d", &K, &C, &M))
{
ln = K+C;
T = ln + ;
_clr(dist, );
for(int i=; i<=ln; i++)
for(int j=; j<=ln; j++)
{
scanf("%d", dist[i]+j);
if(dist[i][j]==) dist[i][j]=INF;
}
//// 求出个实体之间的各个最短距离
Floyd(); printf("%d\n", Slove());
}
return ;
}

poj 2112 floyd+Dinic最大流+二分最小值的更多相关文章

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

    题目链接 测试dinic模版,不知道这个模版到底对不对,那个题用这份dinic就是过不了.加上优化就WA,不加优化TLE. #include <cstdio> #include <s ...

  2. TTTTTTTTTTTT POJ 2112 奶牛与机器 多重二分匹配 跑最大流 建图很经典!!

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 15682   Accepted: 5597 ...

  3. POJ 2112 Optimal Milking 最短路 二分构图 网络流

    题意:有C头奶牛,K个挤奶站,每个挤奶器最多服务M头奶牛,奶牛和奶牛.奶牛和挤奶站.挤奶站和挤奶站之间都存在一定的距离.现在问满足所有的奶牛都能够被挤奶器服务到的情况下,行走距离的最远的奶牛的至少要走 ...

  4. POJ 2112 Optimal Milking【网络流+二分+最短路】

    求使所有牛都可以被挤牛奶的条件下牛走的最长距离. Floyd求出两两节点之间的最短路,然后二分距离. 构图: 将每一个milking machine与源点连接,边权为最大值m,每个cow与汇点连接,边 ...

  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. poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分, dinic, isap

    poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分 dinic /* * Author: yew1eb * Created Time: 2014年10月31日 星期五 ...

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

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

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

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

  9. POJ--2112--Optimal Milking【Floyd+Dinic+二分答案】

    链接:http://poj.org/problem?id=2112 题意:有k个挤奶器.编号1~k,c头牛,编号k+1~k+c,每一个挤奶器最多能给m头牛挤奶,给你一个k+c的邻接矩阵.要求每头牛都能 ...

随机推荐

  1. String.equals()

    名称                                               说明 String.Equals(Obejecct)            确定String实例是否指 ...

  2. POJ3041 二分图最大匹配

    问题:POJ3041 分析: 构造二分图:令A = B = { 1, 2, ... , n }, 分别代表行号集与列号集.假如第i行第j列有一颗行星,则连接Ai与Bj, 表示必须从Ai(即第i行),B ...

  3. js拖拽进度条

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm4.aspx. ...

  4. android中handler使用应该注意的问题(解决由handler引起的OOM内存泄漏)

    最近,在项目过程中频繁的使用handler处理一些ui线程上的操作,以及使用handler的postdealy.然而使用过后却不对handler进行处理,进而产生了内存溢出现象,通过google,发现 ...

  5. Codeforces 474D Flowers

    http://codeforces.com/problemset/problem/474/D 思路:F[i]=F[i-1]+(i>=K)F[i-k] #include<cstdio> ...

  6. sql server 2008 在与 SQL Server 提示建立连接时出现与网络相关的或特定于实例的错误

    原文地址:http://zhidao.baidu.com/link?url=Ndav32DO9zL5XnltqoqlhvKHbJv_n3Zwihhw4cwF9ffNq8hb8z7h7n3vJVfoeW ...

  7. Using HTML5 audio and video

    From:https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_HTML5_audio_and_video Using HTML5 ...

  8. bwlabel函数的c++实现

    实验中需要用到区域联通的算法,就是类似于matlab中bwlabel的函数.网上找了找c++源码未果,bwlabel-python版用python描述了matlab中的实现方法,但是最后对标签的处理部 ...

  9. DirectX 开发环境配置

      想使用DirectX开发游戏,前提是要搭建DirectX的开发环境啦. 下面我们就一起学习下DirectX开发环境搭建 1. 首先是DirectX SDK安装, 下载地址是: http://www ...

  10. qt绘制设备

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from Py ...