POJ2112_Optimal Milking(网洛流最大流Dinic+最短路Flody+二分)
解题报告
农场有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;
}
Time Limit: 2000MS | Memory Limit: 30000K | |
Total Submissions: 11664 | Accepted: 4238 | |
Case Time Limit: 1000MS |
Description
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
* 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
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+二分)的更多相关文章
- P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)
P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...
- 最大流EK和Dinic算法
最大流EK和Dinic算法 EK算法 最朴素的求最大流的算法. 做法:不停的寻找增广路,直到找不到为止 代码如下: @Frosero #include <cstdio> #include ...
- hdu3313 最大流找关键点,或者最短路找关键点.
题意: 给你一个有向图,然后给你起点和终点,问你从起点到终点有多少个关键点,如果当前的这个点删除了就无法从起点到终点,那么这个点就是一个关键点.. 思路: (1)有两种做法,我用的 ...
- [源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流
1.对象流 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File ...
- IO流03_流的分类和概述
[概述] Java的IO流是实现输入/输出的基础,它可以方便的实现数据的输入/输出操作. Java中把不同的输入/输出源(键盘.文件.网络连接)抽象表述为"流"(Stream). ...
- Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)
1. 使用字符流缓冲流的特殊功能 [ newLine() / readLine() ] 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 数据源: a.txt -- 读取数据 ...
- Java基础知识强化之IO流笔记39:字符流缓冲流之复制文本文件案例01
1. 字符流缓冲流之复制文本文件案例 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamRe ...
- Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用
1. 字符流缓冲流: 字符流为了高效读写,也提供了对应的字符缓冲流. BufferedWriter:字符缓冲输出流 BufferedReader:字符缓冲输入流 2. BufferedWriter使用 ...
- JAVA之旅(二十七)——字节流的缓冲区,拷贝mp3,自定义字节流缓冲区,读取键盘录入,转换流InputStreamReader,写入转换流,流操作的规律
JAVA之旅(二十七)--字节流的缓冲区,拷贝mp3,自定义字节流缓冲区,读取键盘录入,转换流InputStreamReader,写入转换流,流操作的规律 我们继续来聊聊I/O 一.字节流的缓冲区 这 ...
随机推荐
- 使用内容提供者和xml备份联系人
1.通过内容提供者获取联系人信息 package com.ithaimazyh.readcontact; import java.util.ArrayList; import java.util.Li ...
- TImage也有OnClick事件,可以当按钮使用,配上合适的图片(背景透明,效果前凸)更是几乎以假乱真
本质上TImage与TSpeedButton没有什么区别,都是没有句柄的,但都可以执行OnClick事件.有空分析一下.
- sql和shell注入测试
1.整数型参数,必须intval转义,用addslashes转义不行 <?php $test = $_REQUEST["test"]; $test = addslashe ...
- ubuntu 安装 maven3.2
1.下载并解压 apache-maven-3.2.5-bin.tar.gz tar -xzvf apache-maven--bin.tar.gz 2.设置环境变量 sudo gedit ~/.prof ...
- 怎样成为一个游戏制作人——第五章:使用GGE图形库来写游戏
怎样成为一个游戏制作人--第五章:使用GGE图形库来写游戏 前言: 细致想了一下,来看博客的一般都是有自学能力的了.C++基础多少也会有一些了. 于是决定以下的章节.会教大家做一些小游戏. 来巩固自己 ...
- Swift - 程序进入后台,以及应用终止时调用的方法
在AppDelegate中有如下两个方法要注意: applicationDidEnterBackground() 当应用进入后台时起作用 applicationWillTerminate() 当应 ...
- 微软推荐的130道ASP.NET常见面试题及答案
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...
- JS - 6款鼠标悬停效果
下载地址:http://www.lanrentuku.com/js/tupian-1093.html
- UVA - 12119 The Bells are Ringing (枚举)
Perhaps you all have heard the mythical story about Tower of Hanoi (The details of this story is not ...
- cPickle.so:: PyUnicodeUCS2_DecodeUTF8
cPickle.so:: PyUnicodeUCS2_DecodeUTF8错误 Python编译的参数,和Python module(mod_wsgi, pymodwsgi)编译参数不一,导致一些un ...