nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用。

现在给nx+ny在矩阵之间的距离。要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值。

始感觉这个类似二分图匹配,不同之处在于挤奶器能够连接m个以内的奶牛,用网络流的模型是能够求出满足条件的解的。

问题是怎样满足最大路程的最小值,这一种典型的二分的问法。。

所以我们二分答案,也就是枚举最大路程,直到求得最小值。

每次建边既加入全部最大路程以内的边,加入源点向每一个挤奶器建边。容量为m。其它边都是1,

若返回的最大流是ny则该枚举值能够达到。

这题由于二分上界wa的是由于 有些点之间開始不直接连通,求了floyd之后联通了且边权>200

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
#define eps 1e-6
#define ll __int64
const int maxn=300;
using namespace std; int n,s,t,level[maxn],c[maxn][maxn];
int m,nx,ny,dis[maxn][maxn]; bool makelevel()
{
memset(level,0,sizeof level);
level[s]=1;
int q[maxn];
int fro=0,iq=0;
q[iq++]=s;
int i,v;
while(fro!=iq)
{
v=q[fro++];
for(i=0;i<=n+1;i++)//注意点的编号
{
if(!level[i]&&c[v][i])
{
level[i]=level[v]+1;
q[iq++]=i;
}
}
}
if(!level[t]) return 0;
return 1;
} int dfs(int now,int maxf)
{
if(now==t) return maxf;
int ret=0;
for(int i=0;maxf&&i<=n+1;i++)//注意点的编号
{
if(c[now][i]&&level[now]+1==level[i])
{
int tmp=dfs(i,min(maxf,c[now][i]));
c[now][i]-=tmp;
c[i][now]+=tmp;
ret+=tmp;
maxf-=tmp;
}
}
return ret;
} int dinic(int d)
{
int i,j;
memset(c,0,sizeof c);
for(i=1;i<=nx;i++)
{
c[s][i]=m;
for(j=nx+1;j<=n;j++)
{
c[j][t]=1;
if(dis[i][j]<=d) c[i][j]=1;
}
}
int ans=0;
while(makelevel()) ans+=dfs(s,inf);
return ans;
} int main()
{
int a,mmax,ri,le,mid,i,j,k;
while(~scanf("%d%d%d",&nx,&ny,&m))
{
mmax=0;
n=nx+ny;
s=0;t=n+1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a);
if(j>nx&&i<=nx) mmax=max(mmax,a);
dis[i][j]=(a==0?inf:a);
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i!=j&&dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
ri=10000;
le=0;
while(le<ri)
{
mid=(le+ri)/2;
if(dinic(mid)>=ny)
ri=mid;
else le=mid+1;
}
printf("%d\n",ri);
}
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

poj2112 Optimal Milking --- 最大流量,二分法的更多相关文章

  1. POJ2112 Optimal Milking —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-2112 Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K T ...

  2. POJ2112 Optimal Milking (网络流)(Dinic)

                                             Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K T ...

  3. POJ2112 Optimal Milking

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 17811   Accepted: 6368 ...

  4. POJ2112 Optimal Milking 【最大流+二分】

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 12482   Accepted: 4508 ...

  5. [USACO2003][poj2112]Optimal Milking(floyd+二分+二分图多重匹配)

    http://poj.org/problem?id=2112 题意: 有K个挤奶器,C头奶牛,每个挤奶器最多能给M头奶牛挤奶. 每个挤奶器和奶牛之间都有一定距离. 求使C头奶牛头奶牛需要走的路程的最大 ...

  6. POJ2112 Optimal Milking(最大流)

    先Floyd求牛到机器最短距离,然后二分枚举最长的边. #include<cstdio> #include<cstring> #include<queue> #in ...

  7. POJ-2112 Optimal Milking(floyd+最大流+二分)

    题目大意: 有k个挤奶器,在牧场里有c头奶牛,每个挤奶器可以满足m个奶牛,奶牛和挤奶器都可以看成是实体,现在给出两个实体之间的距离,如果没有路径相连,则为0,现在问你在所有方案里面,这c头奶牛需要走的 ...

  8. POJ2112:Optimal Milking(Floyd+二分图多重匹配+二分)

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 20262   Accepted: 7230 ...

  9. POJ 2112 Optimal Milking (二分+最短路径+网络流)

    POJ  2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K To ...

随机推荐

  1. hdu2050(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2050 (1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域. 析:可能你 ...

  2. Codeforces 452A Eevee

    #include<bits/stdc++.h> using namespace std; string m[]={"vaporeon","jolteon&qu ...

  3. This application failed to start because it could not find or load the Qt platform plugin &quot;xcb&quot;.

    linux根据系统Qt5未安装编译的程序Qt在该系统下进行下面的错误会报: This application failed to start because it could not find or ...

  4. mysql事务、触发器、视图、存储过程、函数

    存储过程: procedure 概念类似于函数,就是把一段代码封装起来, 当要执行这一段代码的时候,可以通过调用该存储过程来实现. 在封装的语句体里面,可以用if/else, case,while等控 ...

  5. quick-cocos2d-x游戏开发【4】——加入文本

    文本的加入在quick中被封装在ui类中,它能够创建EditBox.菜单以及文本,文本总得来说能够创建TTF和BMFont两种. api对于它的说明非常具体.ui.newBMFontLabel(par ...

  6. sharepoint 2013 userprofile 用户信息

    Sharepoint2013获得当前用户userfrofile 基本介绍: 什么使用户配置文件. 用户属性和用户配置文件属性提供有关 SharePoint 用户的信息,如显示名称.电子邮件.标题以及其 ...

  7. zoj 3822 Domination(2014牡丹江区域赛D称号)

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  8. jQuery中间each实施例的方法

    $.each()和$(selector).each()很阶段似,但它是不一样的. 前者可用于遍历数组或json对象 后者被设计成遍历jQuery对象 第一个是$.each()对,通常这么用 $.eac ...

  9. RPC模式的Hub操作

    signalR 专题—— 第四篇 模拟RPC模式的Hub操作   在之前的文章中,我们使用的都是持久连接,但是使用持久连接的话,这种模拟socket的形式使用起来还是很不方便的,比如只有一个唯一的 O ...

  10. windows phone (27) 基础Button

    原文:windows phone (27) 基础Button Button 在wp7中因其灵活性经常会用到,我们在ContentPanel中直接添加Button,button默认状态下是把整个grid ...