解题报告

农场有k个挤奶机和c头牛,每头牛到每一台挤奶机距离不一样,每台挤奶机每天最多挤m头牛的奶。

寻找一个方案,安排每头牛到某一挤奶机挤奶,使得c头牛须要走的全部路程中的最大路程的最小值。

要使每一头牛都去挤奶,那么建完模型就要推断是否满流。

因为是多源多点的网络,如果源点0,汇点n+1(n=k+c)

源点到每一头牛的容量为1,每一台机器到汇点的容量为m;用flody求出随意一头牛到随意一台机器的最短路;

对于取最大距离的最小值能够用二分来找。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define inf 99999999
#define K 33
#define C 210
using namespace std;
int k,c,m,mmap[K+C][K+C],l[K+C],edge[K+C][K+C],n;
void flody()
{
for(int l=1; l<=n; l++)
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(mmap[i][j]>mmap[i][l]+mmap[l][j])
mmap[i][j]=mmap[i][l]+mmap[l][j];
}
}
}
}
int bfs()
{
memset(l,-1,sizeof(l));
queue<int>Q;
Q.push(0);
l[0]=0;
while(!Q.empty())
{
int u=Q.front();
Q.pop();
for(int i=0; i<=n+1; i++)
{
if(edge[u][i]&&l[i]==-1)
{
l[i]=l[u]+1;
Q.push(i);
}
}
}
if(l[n+1]>0)return 1;
else return 0;
}
void G(int mid)
{
int i,j;
memset(edge,0,sizeof(edge));
for(i=1; i<=k; i++)
edge[i][n+1]=m;
for(i=k+1; i<=n; i++)
edge[0][i]=1;
for(i=k+1; i<=n; i++)
{
for(j=1; j<=k; j++)
{
if(mmap[i][j]<=mid)
edge[i][j]=1;
else edge[i][j]=0;
}
}
}
int dfs(int x,int f)
{
int a;
if(x==n+1)return f;
for(int i=0; i<=n+1; i++)
{
if(edge[x][i]&&l[i]==l[x]+1&&(a=dfs(i,min(f,edge[x][i]))))
{
edge[x][i]-=a;
edge[i][x]+=a;
return a;
}
}
return 0;
}
int dinic(int mid)
{
int ans=0,a;
G(mid);
while(bfs())
while(a=dfs(0,inf))
ans+=a;
return ans;
}
int main()
{
int i,j;
while(~scanf("%d%d%d",&k,&c,&m))
{
n=k+c;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d",&mmap[i][j]);
if(!mmap[i][j])
mmap[i][j]=inf;
}
}
flody();
int L=0,R=20000;
while(L<R)
{
int mid=(L+R)/2;
int ans=dinic(mid);
if(ans>=c)R=mid;
else L=mid+1;
}
printf("%d\n",R);
}
return 0;
}

Optimal Milking
Time Limit: 2000MS   Memory Limit: 30000K
Total Submissions: 11664   Accepted: 4238
Case Time Limit: 1000MS

Description

FJ has moved his K (1 <= K <= 30) milking machines out into the cow pastures among the C (1 <= C <= 200) cows. A set of paths of various lengths runs among the cows and the milking machines. The milking machine locations are named by ID numbers 1..K; the cow
locations are named by ID numbers K+1..K+C. 



Each milking point can "process" at most M (1 <= M <= 15) cows each day. 



Write a program to find an assignment for each cow to some milking machine so that the distance the furthest-walking cow travels is minimized (and, of course, the milking machines are not overutilized). At least one legal assignment is possible for all input
data sets. Cows can traverse several paths on the way to their milking machine. 

Input

* Line 1: A single line with three space-separated integers: K, C, and M. 



* Lines 2.. ...: Each of these K+C lines of K+C space-separated integers describes the distances between pairs of various entities. The input forms a symmetric matrix. Line 2 tells the distances from milking machine 1 to each of the other entities; line 3 tells
the distances from machine 2 to each of the other entities, and so on. Distances of entities directly connected by a path are positive integers no larger than 200. Entities not directly connected by a path have a distance of 0. The distance from an entity
to itself (i.e., all numbers on the diagonal) is also given as 0. To keep the input lines of reasonable length, when K+C > 15, a row is broken into successive lines of 15 numbers and a potentially shorter line to finish up a row. Each new row begins on its
own line. 

Output

A single line with a single integer that is the minimum possible total distance for the furthest walking cow. 

Sample Input

2 3 2
0 3 2 1 1
3 0 3 2 0
2 3 0 1 0
1 2 1 0 2
1 0 0 2 0

Sample Output

2

POJ2112_Optimal Milking(网洛流最大流Dinic+最短路Flody+二分)的更多相关文章

  1. P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)

    P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...

  2. 最大流EK和Dinic算法

    最大流EK和Dinic算法 EK算法 最朴素的求最大流的算法. 做法:不停的寻找增广路,直到找不到为止 代码如下: @Frosero #include <cstdio> #include ...

  3. hdu3313 最大流找关键点,或者最短路找关键点.

    题意:      给你一个有向图,然后给你起点和终点,问你从起点到终点有多少个关键点,如果当前的这个点删除了就无法从起点到终点,那么这个点就是一个关键点.. 思路:      (1)有两种做法,我用的 ...

  4. [源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流

    1.对象流 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File ...

  5. IO流03_流的分类和概述

    [概述] Java的IO流是实现输入/输出的基础,它可以方便的实现数据的输入/输出操作. Java中把不同的输入/输出源(键盘.文件.网络连接)抽象表述为"流"(Stream). ...

  6. Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)

    1. 使用字符流缓冲流的特殊功能 [ newLine() / readLine() ] 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中  数据源: a.txt -- 读取数据 ...

  7. Java基础知识强化之IO流笔记39:字符流缓冲流之复制文本文件案例01

    1. 字符流缓冲流之复制文本文件案例 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamRe ...

  8. Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用

    1. 字符流缓冲流: 字符流为了高效读写,也提供了对应的字符缓冲流. BufferedWriter:字符缓冲输出流 BufferedReader:字符缓冲输入流 2. BufferedWriter使用 ...

  9. JAVA之旅(二十七)——字节流的缓冲区,拷贝mp3,自定义字节流缓冲区,读取键盘录入,转换流InputStreamReader,写入转换流,流操作的规律

    JAVA之旅(二十七)--字节流的缓冲区,拷贝mp3,自定义字节流缓冲区,读取键盘录入,转换流InputStreamReader,写入转换流,流操作的规律 我们继续来聊聊I/O 一.字节流的缓冲区 这 ...

随机推荐

  1. SPOJ 11840. Sum of Squares with Segment Tree (线段树,区间更新)

    http://www.spoj.com/problems/SEGSQRSS/ SPOJ Problem Set (classical) 11840. Sum of Squares with Segme ...

  2. Java 螺纹第三版 第三章数据同步 读书笔记

    多线程间共享数据问题 一.Synchronizedkeyword      atomic一词与"原子"无关,它以前被觉得是物质的最小的单元,不能再被拆解成更小的部分.      当 ...

  3. Swift - iOS中各种视图控制器(View Controller)的介绍

    在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...

  4. 微信jsSDK开发

    (学习类)2015年最新微信公众平台开发 微信JSSDK开发分享功能 链接地址:http://blog.163.com/sdolove@126/blog/static/1146378852015132 ...

  5. SmartGit 试用过期

    smartgit是见过的最好用的git客户端, 要解决其试用版过期的问题,如下: 1.定位到文件夹 Windows: %APPDATA%\syntevo\SmartGit\OS X: ~/Librar ...

  6. perl 自动登陆网站发短信

    use LWP::UserAgent; use HTTP::Date qw(time2iso str2time time2iso time2isoz); use Net::Ping; use Sock ...

  7. js 常用方法记事本

    1.获取被选中行的名称<tab选项卡中为iframe> /* S 获取首页被选中的选项卡名称 */ var currTab = $("#layout_center_tabs&qu ...

  8. 程序员必须知道的几个Git代码托管平台(转)

    上一篇博客中2015继续任性——不会Git命令,照样玩转Git我们简单的介绍了在VS2013中使用Git,和GitHub客户端的使用.那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平 ...

  9. Storm流计算之项目篇(Storm+Kafka+HBase+Highcharts+JQuery,含3个完整实际项目)

    1.1.课程的背景 Storm是什么? 为什么学习Storm? Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop. 随着越来越多的场景对Hadoop的MapRed ...

  10. 基于visual Studio2013解决面试题之0507字符串转整数

     题目