题目大意是:

    K台挤奶机器,C头牛,K不超过30,C不超过200,每台挤奶机器最多可以为M台牛工作,给出这些牛和机器之间,牛和牛之间,机器与机器之间的距离,在保证让最多的牛都有机器挤奶的情况下,给出其中距离最长的一头牛移动距离的最小值。

  首先用Floyd求出任意两点之间的最短距离,然后再用二分法限定最多的移动距离d,在求最大流时,搜索增广路的时候同时也判断距离有没有超过d就行了。

 #include <cstdio>
#include <cstring>
#include <queue>
#define _clr(x, y) memset(x, y, sizeof(x))
#define Min(x, y) (x < y ? x : y)
#define INF 0x3f3f3f3f
#define N 1005
using namespace std; int flow[N][N], dist[N][N];
int level[N];
int K, C, M, S, T, ln; void Floyd()
{
for(int k=; k<=ln; k++)
for(int i=;i<=ln; i++) if(dist[i][k]<INF)
for(int j=; j<=ln; j++)
if(dist[i][k]+dist[k][j]<dist[i][j])
dist[i][j] = dist[i][k]+dist[k][j];
} bool bfs()
{
_clr(level, -);
level[S] = ;
queue<int> Q;
Q.push(S);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
for(int i=; i<=T; i++)
{
if(flow[u][i] && level[i]<)
{
level[i] = level[u] + ;
Q.push(i);
}
}
}
return level[T]> ? : ;
} int dfs(int x, int f)
{
int a;
if(x==T) return f;
for(int i=; i<=T; i++)
{
if(flow[x][i] && level[i]==level[x]+ && (a=dfs(i,Min(f,flow[x][i]))))
{
flow[x][i] -= a;
flow[i][x] += a;
return a;
}
}
level[x] = -;
return ;
} __int64 Dinic(int len)
{
// 构建残余网络
_clr(flow, );
for(int i=; i<=K; i++)
flow[S][i] = M;
for(int i=K+; i<=ln; i++)
flow[i][T] = ;
for(int i=; i<=K; i++) // 机器
for(int j=K+; j<=ln; j++) // 奶牛
flow[i][j] = (dist[i][j]<=len); // 求解最大流
__int64 ans=, a=;
while(bfs())
while(a=dfs(,INF)) ans += a;
return ans;
} // 二分求解满足条件的最小解
int Slove()
{
int l=, r=;
while(l<=r)
{
int mid = (l+r)>>;
if(Dinic(mid)>=C) r = mid-;
else l = mid+;
}
return l;
}
int main()
{
while(~scanf("%d%d%d", &K, &C, &M))
{
ln = K+C;
T = ln + ;
_clr(dist, );
for(int i=; i<=ln; i++)
for(int j=; j<=ln; j++)
{
scanf("%d", dist[i]+j);
if(dist[i][j]==) dist[i][j]=INF;
}
//// 求出个实体之间的各个最短距离
Floyd(); printf("%d\n", Slove());
}
return ;
}

最新文章

  1. linux下cetos7无线网络设置办法
  2. Android之layout_gravity与gravity解析
  3. 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
  4. hdu 5894 hannnnah_j’s Biological Test 组合数学
  5. cookie注入讲解
  6. 关于module_param()宏
  7. [置顶] 项目进阶 之 持续构建环境搭建(二)Nexus私服器
  8. Operation System - Peterson&amp;#39;s Solution算法 解决多线程冲突
  9. QC使用:
  10. iScroll在谷歌浏览器中的问题
  11. 【C++】满二叉树问题
  12. eclipse设置新建jsp文件默认字符编码为utf-8
  13. Go web编程实例
  14. 【java】接口
  15. mysql 数据库关于增加用户权限的问题
  16. vue build打包后css里的图片路径404不正确的问题
  17. 如何利用pyCharm编写和运行python文件
  18. 说一说HTTP
  19. 20155338 2016-2017-2 《Java程序设计》第3周学习总结
  20. java IO之File基本操作

热门文章

  1. 解决django关于图片无法显示的问题
  2. Avro基础
  3. jQuery插件学习(一)
  4. python学习第一天 -安装配置及其输入输出
  5. tableView点击后取消选中效果
  6. uva201 Squares
  7. apache window环境下本地配置虚拟主机
  8. windows 守护进程
  9. 【转】CTS tests 4.2_r4
  10. cf446A DZY Loves Sequences