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 一.字节流的缓冲区 这 ...
随机推荐
- 基于二叉树和数组实现限制长度的最优Huffman编码
具体介绍详见上篇博客:基于二叉树和双向链表实现限制长度的最优Huffman编码 基于数组和基于链表的实现方式在效率上有明显区别: 编码256个符号,符号权重为1...256,限制长度为16,循环编码1 ...
- EF架构使用随机排序
c#当中,可以用Random类来获取随机数 EF当中,我们写Linq时,抑或是采用Linq的扩展方法时,发现都没有随机排序的方法,这就要求我们自己去扩展了 引用自http://www.cnblogs. ...
- asp.net2.0安全性(2)--用户个性化设置(2)--转载来自车老师
上一篇我们用Profile.age等方式可以读取用户的年龄和其它的信息,但有的时候我们要查询显示所有用户的信息,但asp.net没有提供查询所有用户信息的功能,我们只能对现有的用户逐一查询其Profi ...
- ViewState的用法
学习标签: ViewState 本文导读:在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了所有 ...
- PHP 页面跳转到另一个页面的几种方法分享
如何在 PHP 中从一个页面重定向到另外一个页面呢?今天 清源 为大家列举出了三种办法,供大家来参考. 一.用HTTP头信息 也就是用PHP的HEADER函数.PHP里的HEADER函数的作用就是向 ...
- 小细节--Extjs中,renderTo 和applyTo的区别
说到web前端框架,extjs绝对算是非常优秀的一个. extjs中,两个方法很像,renderTo和applyTo,我在网上也搜了很多相关的内容,在这里举例为大家进行区分,欢迎大家交流指正. 主要区 ...
- 基于visual Studio2013解决C语言竞赛题之1074八皇后
题目 解决代码及点评 /************************************************************************/ /* ...
- 通过IP或socket获取对方的MAC地址
1.通过已经连接的socket文件获取: int getpeermac( int sockfd, char *buf ) { int ret =0; struct arpreq arpreq; str ...
- Windows 8 动手实验系列教程 实验8:Windows应用商店API
动手实验 实验 8: Windows应用商店API 2012年9月 简介 编写Windows应用商店应用最令人瞩目的理由之一是您可以方便地将它们发布到Windows应用商店.考虑到世界范围内目前有超过 ...
- 【Demo 0001】Android 程序结构
Android 学习步骤及内容: 1. Android 程序结构(开发环境搭建,Android第一程序,程序启动过程以及工程介绍): 2. Android 事件(通用使用规则,通用 ...