题意:
     一个农场主有一些奶牛,和一些机器,每台机器有自己的服务上限,就是一天最多能给多少头奶牛挤奶,给你任意两点的距离,问你让所有的奶牛都被挤奶时,奶牛于机器最远距离的最近是多少。

思路:

      求最远的最近,二分,然后用最大流去判断是否所有的奶牛都被挤奶了,简单题目,不多解释了,还有注意一点就是二分前记得Floyd一下,他没说给的是最短距离。


#include<stdio.h>
#include<string.h>
#include<queue>#define N_node 250
#define N_edge 150000
#define INF 1000000000using namespace std;typedef struct
{int to ,next ,cost;
}STAR;typedef struct
{int x ,t;
}DEP;STAR E[N_edge];
DEP xin ,tou;
int list[N_node] ,listt[N_node] ,tot;
int deep[N_node] ,map[N_node][N_node];void add(int a ,int b ,int c)
{E[++tot].to = b;E[tot].cost = c;E[tot].next = list[a];list[a] = tot;E[++tot].to = a;E[tot].cost = 0;E[tot].next = list[b];list[b] = tot;
}int minn(int x ,int y)
{return x < y ? x : y;
}bool BFS_Deep(int s ,int t ,int n)
{memset(deep ,255 ,sizeof(deep));xin.x = s ,xin.t = 0;deep[xin.x] = xin.t;queue<DEP>q;q.push(xin);while(!q.empty()){tou = q.front();q.pop();for(int k = list[tou.x] ;k ;k = E[k].next){xin.x = E[k].to;xin.t = tou.t + 1;if(deep[xin.x] != -1 || !E[k].cost)continue;deep[xin.x] = xin.t;q.push(xin);}}for(int i = 0 ;i <= n ;i ++)listt[i] = list[i];return deep[t] != -1;
}int DFS_Flow(int s ,int t ,int flow)
{if(s == t) return flow;int nowflow = 0;for(int k = listt[s] ;k ;k = E[k].next){int to = E[k].to ,c = E[k].cost;listt[s] = k;if(deep[to] != deep[s] + 1 || !E[k].cost)continue;int tmp = DFS_Flow(to ,t ,minn(c ,flow - nowflow));nowflow += tmp;E[k].cost -= tmp;E[k^1].cost += tmp;if(nowflow == flow) break;}if(!nowflow) deep[s] = 0;return nowflow;
}int DINIC(int s ,int t ,int n)
{int ans = 0;while(BFS_Deep(s ,t ,n)){ans += DFS_Flow(s ,t ,INF);}return ans;
}void Floyd(int n)
{for(int k = 1 ;k <= n ;k ++)for(int i = 1 ;i <= n ;i ++)for(int j = 1 ;j <= n ;j ++)map[i][j] = minn(map[i][j] ,map[i][k] + map[k][j]);
}bool ok(int mid ,int K ,int C ,int M)
{memset(list ,0 ,sizeof(list));tot = 1;for(int i = 1 ;i <= K ;i ++)add(0 ,i ,M);for(int i = 1 ;i <= K ;i ++)for(int j = K + 1 ;j <= K + C ;j ++)if(mid >= map[i][j]) add(i ,j ,1);for(int i = 1 ;i <= C ;i ++)add(i + K ,K + C + 1 ,1);return DINIC(0 ,C + K + 1 ,C + K + 1) == C;
}int main ()
{int K ,C ,M;int i ,j ,a;while(~scanf("%d %d %d" ,&K ,&C ,&M)){for(i = 1 ;i <= K + C ;i ++)for(j = 1 ;j <= K + C ;j ++){scanf("%d" ,&map[i][j]);if(!map[i][j]) map[i][j] = INF;}Floyd(K + C);int Max = 0;for(i = 1 ;i <= K ;i ++)for(j = K + 1 ;j <= K + C ;j ++)if(Max < map[i][j])Max = map[i][j];int low = 0 ,up = Max ,mid ,ans;while(low <= up){mid = (low + up) >> 1;if(ok(mid ,K ,C ,M)){up = mid - 1;ans = mid;}else low = mid + 1;}printf("%d\n" ,ans);}return 0;
}

poj2112 二分最大流+Floyd相关推荐

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

    POJ 2112 Optimal Milking 题目链接 题意:给定一些机器和奶牛,在给定距离矩阵,(不在对角线上为0的值代表不可达),每一个机器能容纳m个奶牛.问全部奶牛都能挤上奶,那么走的距离最 ...

  2. POJ3228二分最大流

    题意:       有n个点,每个点有两个权值,金子数量还有仓库容量,金子可以存在自己的仓库里或者是别的仓库里,仓库和仓库之间有距离,问所有金子都必须存到库里最大距离的最小是多少? 思路:       ...

  3. hdu4560 不错的建图,二分最大流

    题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  4. P4068-[SDOI2016]数字配对【二分,费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P4068 题目大意 nnn种数字,第iii个是aia_iai​,有bib_ibi​个,价值为ci∗cjc_i*c_j ...

  5. HDU3081 Marriage Match II —— 传递闭包 + 二分图最大匹配 or 传递闭包 + 二分 + 最大流...

    题目链接:https://vjudge.net/problem/HDU-3081 Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    ...

  6. HDU 3081 Marriage Match II (并查集+二分+最大流 | 并查集+二分图匹配)

    题意:n 个男生.n个女生玩游戏,每个女生都可以和她不讨厌的男生结婚,此外她的朋友如果也不讨厌这个男生,也可以和他结婚:对于女生,如果A和B是朋友,B和C是朋友,那么A和C也是朋友.每次游戏女生会找一 ...

  7. POJ 2112 二分+最大流

    题意: 有k个牛奶机跟c头牛.他们之间有路相连,农民想让每个牛能到其中一个牛奶机,又想让走路最远的牛走得最小. 题解: 求最大值最小,不出意外就是二分了 由于要限制总的路径长度,就不能对每条边限制了, ...

  8. POJ3189二分最大流(枚举下界,二分宽度,最大流判断可行性)

    题意:       有n头猪,m个猪圈,每个猪圈都有一定的容量(就是最多能装多少只猪),然后每只猪对每个猪圈的喜好度不同(就是所有猪圈在每个猪心中都有一个排名),然后要求所有的猪都进猪圈,但是要求所有 ...

  9. POJ 3228 二分最大流

    题意:       给你N个位置,每个位置都有金矿数量和仓库数量,然后位置和位置之间的距离给了出来,最后问你吧所有的金矿都放到库里面走的路径 最长的最短 是多少? 思路:      比较简单的一个题, ...

最新文章

  1. 2021 年 7 月编程语言排行榜
  2. php商城的购物车功能,PHP实现添加购物车功能
  3. Caffe训练ImageNet
  4. 机器学习从零开始-Kaggle数据用PurePython实战
  5. .net 如何设置和检索特性信息(attribute)
  6. 【图像处理】——鼠标点击图像的一处,获得点击点的坐标值
  7. electron 打包_Vue3+Electron整合方式
  8. 谁说菜鸟不会数据分析--读书笔记
  9. pythonshell窗口是什么_python与shell的3种交互方式介绍
  10. Week09《java程序设计》第九次作业总结
  11. Java工程师必备资料,整合1G多jar包,网速慢也没关系,关注获取更多资源
  12. 计算机应用主要学PS,计算机应用专业PS模块考试标准.doc
  13. mysql comment_mysql中的comment用法
  14. Error “Client wants topic A to have B, but our version has C. Dropping connection.“
  15. 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!
  16. 人工智能学习笔记(三)有信息搜索
  17. 工规/车规 LDO SCT71403F,替代TPS7B82-Q1 , TPS7B81-Q1,TPS7B69-Q1,MPQ2013, MPQ2013A
  18. pstree命令使用
  19. Mixamo:在线3D动漫角色生成平台
  20. 【Dart 教程系列第 21 篇】Dart 之 firstWhere 返回数组中第一个满足条件的元素

热门文章

  1. 深入Garbage First垃圾收集器(三)G1中的垃圾收集
  2. mybait 转换失败 null处理
  3. MairaDB 函数(一)
  4. source insight设置tab键为4个空格
  5. 百篇大计敬本年之系统篇《八》—— Ubuntu16.04 挂载windows的 NTFS 文件系统时错误的解决方法...
  6. 路由重分布与分布列表
  7. 思科防火墙PIX ASA精华配置总结
  8. 20175208『Java程序设计』课程 结对编程练习_四则运算
  9. ResDepot CRC码
  10. 【HDU4734】F(x) 数位DP