链接

floyd求出牛到机器的最短距离,二分距离,小于当前距离的边容量设为1,求出满容量下的最短距离。

EK算法

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<stdlib.h>
  6. #include<vector>
  7. #include<cmath>
  8. #include<queue>
  9. #include<set>
  10. using namespace std;
  11. #define N 255
  12. #define LL long long
  13. #define INF 0xfffffff
  14. const double eps = 1e-;
  15. const double pi = acos(-1.0);
  16. const double inf = ~0u>>;
  17. int path[N],flow[N],gh[N][N],st,en;
  18. int w[N][N];
  19. int bfs()
  20. {
  21. int i;
  22. memset(path,-,sizeof(path));
  23. for(i = ; i <= en ; i++)
  24. flow[i] = INF;
  25. queue<int>q;
  26. q.push();
  27. while(!q.empty())
  28. {
  29. int tk = q.front();
  30. q.pop();
  31. if(tk==en)
  32. break;
  33. for(i = ; i <= en ; i++)
  34. {
  35. if(path[i]==-&&gh[tk][i])
  36. {
  37. path[i] = tk;
  38. flow[i] = min(flow[tk],gh[tk][i]);
  39. q.push(i);
  40. }
  41. }
  42. }
  43. if(path[en]==-)
  44. return -;
  45. return flow[en];
  46. }
  47. int EK()
  48. {
  49. int now,pre,sum=,k;
  50. while((k=bfs())!=-)
  51. {
  52. sum+=k;
  53. now = en;
  54. while(now!=st)
  55. {
  56. pre = path[now];
  57. gh[pre][now]-=k;
  58. gh[now][pre]+=k;
  59. now = pre;
  60. }
  61. }
  62. return sum;
  63. }
  64. int main()
  65. {
  66. int k,c,i,g,j,m;
  67. while(scanf("%d%d%d",&k,&c,&m)!=EOF)
  68. {
  69. int n = k+c;
  70. for(i = ; i <= n+; i++)
  71. for(j = ;j <= n+ ; j++)
  72. w[i][j] = INF;
  73. for(i = ;i <= n+ ; i++)
  74. for(j = ; j <= n+ ; j++)
  75. {
  76. scanf("%d",&w[i][j]);
  77. if(w[i][j]==) w[i][j] = INF;
  78. if(i==j) w[i][i] = ;
  79. w[j][i] = w[i][j];
  80. }
  81. for(i = ; i <= n+; i++)
  82. for(j = ; j <= n+ ;j++)
  83. for(g = ;g <= n+; g++)
  84. w[j][g] = min(w[j][g],w[j][i]+w[i][g]);
  85. st = ;
  86. en = n+;
  87. int low = ,high = ,mid;
  88. while(low<=high)
  89. {
  90. mid = (low+high)>>;
  91. memset(gh,,sizeof(gh));
  92. for(i = ; i <= k+ ; i++)
  93. gh[i][en] = m;
  94. for(i = k+; i <= n+; i++)
  95. gh[st][i] = ;
  96. for(i = k+; i <= n+; i++)
  97. for(j = ; j <= k+ ; j++)
  98. if(w[i][j]<=mid)
  99. gh[i][j] = w[i][j];
  100. //cout<<EK()<<endl;
  101. if(EK()==c)
  102. high = mid-;
  103. else
  104. low =mid+;
  105. }
  106. cout<<low<<endl;
  107. }
  108. return ;
  109. }

poj2112Optimal Milking(二分+最大流)的更多相关文章

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

    题目大意: 在一个农场里面,有k个挤奶机,编号分别是 1..k,有c头奶牛,编号分别是k+1 .. k+c,每个挤奶机一天最让可以挤m头奶牛的奶,奶牛和挤奶机之间用邻接矩阵给出距离.求让所有奶牛都挤到 ...

  2. TZOJ 1594 Optimal Milking(二分+最大流)

    描述 FJ has moved his K (1 <= K <= 30) milking machines out into the cow pastures among the C (1 ...

  3. uvalive 3231 Fair Share 公平分配问题 二分+最大流 右边最多流量的结点流量尽量少。

    /** 题目: uvalive 3231 Fair Share 公平分配问题 链接:https://vjudge.net/problem/UVALive-3231 题意:有m个任务,n个处理器,每个任 ...

  4. poj 2391 Ombrophobic Bovines 最短路 二分 最大流 拆点

    题目链接 题意 有\(n\)个牛棚,每个牛棚初始有\(a_i\)头牛,最后能容纳\(b_i\)头牛.有\(m\)条道路,边权为走这段路所需花费的时间.问最少需要多少时间能让所有的牛都有牛棚可待? 思路 ...

  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 二分图匹配+并查集 OR 二分+最大流

    二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...

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

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

  8. POJ3228二分最大流

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

  9. POJ2112_Optimal Milking(网洛流最大流Dinic+最短路Flody+二分)

    解题报告 农场有k个挤奶机和c头牛,每头牛到每一台挤奶机距离不一样,每台挤奶机每天最多挤m头牛的奶. 寻找一个方案,安排每头牛到某一挤奶机挤奶,使得c头牛须要走的全部路程中的最大路程的最小值. 要使每 ...

随机推荐

  1. CSS3 Selector

    每个前端工程师可能每天都会写一些css,其中选择器是很主要的一部分.但是,大家可能每天写的大多是#id,.class这样的选择器,这并不稀奇,但是如果我们了解并且熟用css3为我们提供的强大并且优雅的 ...

  2. what's WSDL

    WSDL (Web Services Description Language,Web服务描述语言) 它是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些 ...

  3. SWT.Shell

    import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class SWT_Shell ...

  4. Hive两种访问方式:HiveServer2 和 Hive Client

        老版HiveClient:  要求比较多,需要Hive和Hadoop的jar包,各配置环境.       HiveServer2:   使得与YARN和HDFS的连接从Client中独立出来, ...

  5. vim使用手册出现 找到 tag:1/9或更多 查看别的定义的方法

    :ts 或 tselect 查看有相同地方的定义 通过这种方式会出现一个列表,输入:q 然后通过数字键和回车查看某一个定义,个人经常用:ts :tn或tnext 查找下一个定义地方. :tp 查找上一 ...

  6. bfs 邻接表

    #include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int date; st ...

  7. Centos6.8更好yum源

    第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...

  8. java scoket客户端服务端发送消息

    客户端 public class User { public static void main(String[] args) { while (true) { try { Socket socket ...

  9. Oracle:ORA-01790: expression must have same datatype as corresponding expression

    今天有现场报sql错误,错误sql语句 类似  select * from  tableA  where (exists  条件A   or exists 条件B), 单独执行  select * f ...

  10. 修改fuse库成功

    使用的是fuse-2.9.2 在lib目录下的helper.c的fuse_main_real函数里打印一句话,然后将fuse库编译并install. 对ssfs进行编译,运行后,出现了打印的那句话! ...