题意:

K个挤奶器 C头牛 每个挤奶器可同时挤C头牛

牛和挤奶器均分散在各个农场

下面给出 [K+C,K+C] 的邻接矩阵。表示任意点间距离(0表示无法到达)

问:距离挤奶器最远的牛 的距离(设计一个方案使得所有牛都能到达挤奶器并且使这个距离最小,题目保证有解)

思路:

Floyd求传递闭包。

二分这个距离(在距离内的边都可行),网络流判断是否可行

(XXWG的代码)

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef long long ll;
const ll inf=100000000000LL;
const ll maxn=2000;++++
ll head[maxn],tol,dep[maxn];
struct node
{ll from,to,next,cap;node(){};node(ll from,ll to, ll next,ll cap):from(from),to(to),next(next),cap(cap){}
}edge[1000000];
void add(ll u,ll v,ll cap)
{edge[tol]=node(u,v,head[u],cap);head[u]=tol++;edge[tol]=node(v,u,head[v],0);head[v]=tol++;
}
bool bfs(ll s,ll t)
{ll que[maxn],front=0,rear=0;memset(dep,-1,sizeof(dep));dep[s]=0;que[rear++]=s;while(front!=rear){ll u=que[front++];front%=maxn;for(ll i=head[u];i!=-1;i=edge[i].next){ll v=edge[i].to;if(edge[i].cap>0&&dep[v]==-1){dep[v]=dep[u]+1;que[rear++]=v;rear%=maxn;if(v==t)return 1;}}}return 0;
}ll dinic(ll s,ll t)
{ll res=0;while(bfs(s,t)){ll Stack[maxn],top,cur[maxn];memcpy(cur,head,sizeof(head));top=0;ll u=s;while(1){if(t==u){ll min=inf;ll loc;for(ll i=0;i<top;i++)if(min>edge[Stack[i]].cap){min=edge[Stack[i]].cap;loc=i;}for(ll i=0;i<top;i++){edge[Stack[i]].cap-=min;edge[Stack[i]^1].cap+=min;}res+=min;top=loc;u=edge[Stack[top]].from;}for(ll i=cur[u];i!=-1;cur[u]=i=edge[i].next)if(dep[edge[i].to]==dep[u]+1&&edge[i].cap>0)break;if(cur[u]!=-1){Stack[top++]=cur[u];u=edge[cur[u]].to;}else {if(top==0)break;dep[u]=-1;u=edge[Stack[--top]].from;}}}return res;
}ll dist[1000][1000];
int main()
{int K,C,M,i,j,k,m,n;while(cin>>K>>C>>M){for(i=1;i<=K+C;i++)  for(j=1;j<=K+C;j++){scanf("%I64d",&dist[i][j]); if(dist[i][j] == 0)dist[i][j] = inf;}for(k=1;k<=K+C;k++)for(i=1;i<=K+C;i++)    if(k!=i&&dist[i][k]!=inf)for(j=1;j<=K+C;j++)  if(i!=j && j!=k && dist[k][j]!=inf)dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]);for(i=1;i<=K+C;i++)dist[i][i] = 0;ll left=0,right=30000, ans=inf;while(left<=right){ll mid=(left+right)>>1;memset(head,-1,sizeof(head));tol=0;for(i=1;i<=K;i++){for(j=K+1;j<=K+C;j++)if(dist[i][j]<=mid)   add(i,j,1);}for(i=K+1;i<=K+C;i++)  add(i,K+C+1,1);for(i=1;i<=K;i++)       add(0,i,M);if(dinic(0,K+C+1) == C)right=mid-1, ans = min(ans, mid);else left=mid+1;}printf("%I64d\n", ans);}return 0;
}
/*
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*/

POJ 2112 二分+网络流相关推荐

  1. POJ 2112 二分+最大流

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

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

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

  3. POJ - 2018 二分+单调子段和

    依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个 ...

  4. 【bzoj1532】[POI2005]Kos-Dicing 二分+网络流最大流

    题目描述 Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评选出玩得最好的人.现在有一个非常不走运的 ...

  5. Drying POJ - 3104 二分

    Drying    POJ - 3104  二分      http://poj.org/problem?id=3104 二分查找作用之一:查找结果,逆向求解. 最让HSQ学长头疼的就是洗衣服了.洗完 ...

  6. POJ 3579 二分答案

    POJ 3579 二分答案 文章目录 POJ 3579 二分答案 题目 思路 代码 题目 思路 排序,二分一下答案,然后对于每一个元素看一看加上这个答案tmp之后,在数列里面排在哪里,比a[i]+tm ...

  7. POJ 2455Secret Milking Machine(二分+网络流之最大流)

    题目地址:POJ2455 手残真浪费时间啊..又拖到了今天才找出了错误..每晚两道题不知不觉又变回了每晚一道题...sad.. 第一次在isap中忘记调用bfs,第二次则是遍历的时候竟然是从1開始遍历 ...

  8. poj 2112 Optimal Milking(二分+Floyd+最大流)

    题意:K个产奶机,C头奶牛,每个产奶机最多可供M头奶牛使用:并告诉了产奶机.奶牛之间的两两距离Dij(0<=i,j<K+C). 问题:如何安排使得在任何一头奶牛都有自己产奶机的条件下,奶牛 ...

  9. POJ - 2112 Optimal Milking(二分+二分图最大匹配-多重匹配(修改匈牙利实现)+Floyd求最短路)

    题目链接:点击查看 题目大意:给出n个牛奶机器,再给出m只奶牛,每个机器只能让最多k只牛一起挤奶,现在问如何分配奶牛,能让最远的那只奶牛到达机器的距离最小 题目分析:很综合的一道题目了,不算很难,但比 ...

最新文章

  1. A Learned Representation for Artistic Style论文理解
  2. 使用链路聚合进行负载分担
  3. pcre库文件的安装
  4. 中华成语故事摄制组大公无私的释义
  5. Ruby中求50之内的素数方法
  6. Ubuntu上安装nginx步骤及问题记录
  7. JS动态获取当前时间
  8. linux下安装navicat并生成桌面图标
  9. 404 错误页面_如何设计404错误页面,以使用户留在您的网站上
  10. Lolipa魔方财务主题-虚拟主机源码
  11. arm的bin二进制代码分析
  12. JS对数据进行判空操作
  13. vue自执行函数,vue3动态组件
  14. 我对智能网卡offload的认识
  15. 各种主流浏览器的调试
  16. php to es7,只需五步 集成新版 Elasticsearch7.9 中文搜索 到你的 Laravel7 项目
  17. CSP 202203-2出行计划
  18. Python初级学习教程—从入门开始学习(函数、组合数据类型、文件操作、异常、模块)
  19. 杭电 1287 破译密码
  20. DTOJ 1486:分数(score)

热门文章

  1. J2EE总结:Java命名与目录接口JNDI
  2. 谈谈信息安全入门这事 New Address
  3. 世界上最尴尬的4件事zt
  4. java 文件地址截取文件名_关于Java文件名的截取方法
  5. Spring @Autowired NPE:Why @Autowired Bean is null? private 修饰符!
  6. 论文笔记(六))《real-world adversarial examples involving makeup application 》
  7. 国仁老猫:“视频号”最新最全变现引流方式大全;值得收藏【下】
  8. android7.1.1 文件管理,华为手机文件管理器(com.huawei.hidisk) - 10.11.11.301 - 应用 - 酷安...
  9. 爬取西刺网的免费IP
  10. 通过尚硅谷sql基础的视频及相关资料整理出的SQL基础笔记