题意:K个产奶机,C头奶牛,每个产奶机最多可供M头奶牛使用;并告诉了产奶机、奶牛之间的两两距离Dij(0<=i,j<K+C)。

问题:如何安排使得在任何一头奶牛都有自己产奶机的条件下,奶牛到产奶机的最远距离最短?最短是多少?

建图 源点    -> 每头牛  ->   每个机器 ->   汇点

权             1                ?                  M

二分 找最远距离 里面最小的

二分距离  if dis[i][j]<dis   牛到机器的流量 1  也就是权

 #include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue> using namespace std; #define MAXN 300
#define inf 100000000
int k,c,m,n;
int S,T; //我把源点和汇点 设成 0 n+1
int dis[MAXN][MAXN];
int z[MAXN][MAXN];
int vis[MAXN]; void floyed()
{
int i,j,k; for(k=;k<=n;k++)
{
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
void makemap(int w)
{
int i,j;
memset(z,,sizeof(z)); //反向边这边已经有了
for(i=k+;i<=n;i++)
z[][i]=;
for(i=;i<=k;i++)
z[i][n+]=m;
for(i=k+;i<=n;i++)
for(j=;j<=k;j++)
{
if(dis[i][j]<=w)
z[i][j]=;
}
}
int bfs()
{
memset(vis,-,sizeof(vis));
vis[S]=;
queue<int>q1;
q1.push(S);
int i;
while(!q1.empty())
{
int now=q1.front();
q1.pop();
for(i=;i<=n+;i++)
{
if(vis[i]<&&z[now][i])
{
q1.push(i);
vis[i]=vis[now]+;
}
}
}
return vis[T]!=-;
}
int dfs(int u,int w)
{
int ans=;
if(u==T)
return w;
int i;
for(i=;i<=n+;i++)
{
if(vis[i]==vis[u]+&&z[u][i])
{
int b=dfs(i,min(z[u][i],w-ans));
z[u][i]-=b;
z[i][u]+=b;
ans=ans+b;
}
}
return ans;
} int main()
{
while(scanf("%d%d%d",&k,&c,&m)!=EOF)
{
int i,j;
n=k+c; for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
scanf("%d",&dis[i][j]);
if(dis[i][j]==)
dis[i][j]=inf;
}
floyed();
int L,R;
L=;
R=inf;
S=;
T=n+;
int ans=;
while(L<=R)
{
int w=,mid;
mid=(L+R)>>;
makemap(mid);
while(bfs())
w+=dfs(,inf);
if(w>=c)
{
ans=mid;
R=mid-;
}
else
L=mid+;
} printf("%d\n",ans);
} return ;
}

最新文章

  1. [LeetCode] Min Stack 最小栈
  2. Yii源码阅读笔记(三十三)
  3. 【转】SQL Server中的事务与锁
  4. underscore.js 一个强大的js函数库
  5. &lt;a href=&quot;javascript:void(0);&quot; id=&#39;test&#39; onclick=&quot;javascript:alert(&#39;即将上线,敬请期待!&#39;);&quot;&gt;&lt;em class=&quot;rmwd&quot;&gt;&lt;/em&gt;征稿平台&lt;/a&gt;
  6. PHP定义数组常量
  7. mybatis---知识点复习
  8. Docker Swarm集群
  9. HTML5培训哪里靠谱
  10. SpringMVC源码之Controller查找原理
  11. java程序的加载过程
  12. CentOS 7.5 安装 Python3.7
  13. JS 中的对象
  14. 使用openCV打开USB摄像头(UVC 小米micro接口)
  15. python3+scrapy 趣头条爬虫实例
  16. Tail Recusive
  17. C语言编程—自动生成四则运算升级版
  18. Windows上Nginx的安装教程详解
  19. Laravel 定时任务
  20. Application HookMainWindow

热门文章

  1. AC日记——简单密码 openjudge 1.7 10
  2. html5游戏-包围盒检测算法
  3. 分享一例测试环境下nginx+tomcat的视频业务部署记录
  4. Mysql的二进制日志binlog的模式说明
  5. 使用Jquery向一个空白网页动态创建一个iframe,及嵌入页面,和向嵌入页面传参
  6. struts2 异常处理3板斧
  7. RelayCommand
  8. Data URI 应用场景小结
  9. 我们来八一八阿里云OS的实质和历史
  10. linux 内存清理/释放命令