题意:各一个地图,两点之间有若干条路,要在节点1和节点n之间行走t次(就是问1到n的路径数至少为t,每一条路径不能有重复),问所有路径里面最长的部分(这个题目特别强调,不是路径长度和,是路径中相邻两点的距离)最小是多少。

网络流+二分。

二分路径最长的一段,根据二分值构图。

构图方法:

如果两点路径长度小于x,则两点之间连接一条边,权值为1(如果已经连接了,权值加1)。

最大流既是从1到n不重复的路径条数,判断是否大于规定的t条即可。

注意一下这题是无向图,两个方向的初始流量相等(有向图只有一个方向有流量,另外一个方向的流量初始为0)。

  1. #include <iostream>
  2. #include <cstring>
  3. #include <vector>
  4. #include <cstdio>
  5. #include <algorithm>
  6. using namespace std;
  7. #define N 240
  8. #define INF 0x3f3f3f3f
  9.  
  10. class Dinic {
  11. public:
  12. int n, s, t, l[N], c[N][N], e[N];
  13. int flow(int maxf = INF) {
  14. int left = maxf;
  15. while (build()) left -= push(s, left);
  16. return maxf - left;
  17. }
  18. int push(int x, int f) {
  19. if (x == t) return f;
  20. int &y = e[x], sum = f;
  21. for (; y<n; y++)
  22. if (c[x][y] > 0 && l[x]+1==l[y]) {
  23. int cnt = push(y, min(sum, c[x][y]));
  24. c[x][y] -= cnt;
  25. c[y][x] += cnt;
  26. sum -= cnt;
  27. if (!sum) return f;
  28. }
  29. return f-sum;
  30. }
  31. bool build() {
  32. int m = 0;
  33. memset(l, -1, sizeof(l));
  34. l[e[m++]=s] = 0;
  35. for (int i=0; i<m; i++) for (int y=0; y<n; y++)
  36. if (c[e[i]][y] > 0 && l[y]<0) l[e[m++]=y] = l[e[i]] + 1;
  37. memset(e, 0, sizeof(e));
  38. return l[t] >= 0;
  39. }
  40. } net;
  41. int n, p, t, a[40004], b[40004], c[40004];
  42. bool ok(int x) {
  43. memset(net.c, 0, sizeof(net.c));
  44. net.s = 0, net.t = n-1, net.n = n;
  45.  
  46. for (int i=0; i<p; i++) if (c[i] <= x)
  47. net.c[a[i]-1][b[i]-1]++, net.c[b[i]-1][a[i]-1]++; //本题是无向图,所以 i->j 和 j->i 都要增加
  48.  
  49. return net.flow() >= t;
  50. }
  51. int main() {
  52.  
  53. scanf("%d%d%d", &n, &p, &t);
  54.  
  55. for (int i=0; i<p; i++) scanf("%d%d%d", &a[i], &b[i], &c[i]);
  56.  
  57. int l = 0, r = INF, mid, ans;
  58.  
  59. while (l <= r) {
  60. mid = (l + r) >> 1;
  61. if (ok(mid)) {
  62. ans = mid;
  63. r = mid - 1;
  64. } else l = mid + 1;
  65. }
  66. cout << ans << endl;
  67.  
  68. return 0;
  69. }

POJ Secret Milking Machine 【网络流+二分】的更多相关文章

  1. POJ 2455:Secret Milking Machine(二分+最大流)

    http://poj.org/problem?id=2455 题意:给出n个点和m条无向路,每条路都有一个长度.从1点到n点要走t次两两互不重合的路.求出每条1->n的路中相邻两点最大值的最小值 ...

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

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

  3. POJ 2455 Secret Milking Machine 【二分】+【最大流】

    <题目链接> 题目大意: FJ有N块地,这些地之间有P条双向路,每条路的都有固定的长度l.现在要你找出从第1块地到第n块地的T条不同路径,每条路径上的路段不能与先前的路径重复,问这些路径中 ...

  4. [BZOJ 1733] [Usaco2005 feb] Secret Milking Machine 【二分 + 最大流】

    题目链接:BZOJ - 1733 题目分析 直接二分这个最大边的边权,然后用最大流判断是否可以有 T 的流量. 代码 #include <iostream> #include <cs ...

  5. POJ2455 Secret Milking Machine【二分,最大流】

    题目大意:N个点P条边,令存在T条从1到N的路径,求路径上的边权的最大值最小为多少 思路:做了好多二分+最大流的题了,思路很好出 二分出最大边权后建图,跑dinic 问题是....这题是卡常数的好题! ...

  6. POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9658   Accepted: ...

  7. 【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流

    题目描述 Farmer John is constructing a new milking machine and wishes to keep it secret as long as possi ...

  8. POJ 2455 Secret Milking Machine(最大流+二分)

    Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...

  9. BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 网络流 + 二分答案

    Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...

随机推荐

  1. liunx使用技巧

    1.挂载与卸载U盘 新建一个目录:mkdir /mnt/usb; Fdisk –l |less  查看添加之后的设备名,设备文件系统格式 加载U盘设备: mount –t vfat /mnt/usb ...

  2. RHEL6.4 NFS文件共享服务搭建

    NFS文件共享服务 1 实验方案 使用2台RHEL6.4虚拟机,其中一台作为NFS共享服务器(192.168.100.1).另外一台作为测试用的NFS客户机(192.168.100.2) 2.实现 2 ...

  3. 工具类_java 操作cookie

    import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;im ...

  4. cocos2dx 在mac下开发ios和android游戏

    这里主要说android,因为ios开发在文章 http://blog.csdn.net/itcastcpp/article/details/24792323 中已经说过. 1)打开工程 打开ecli ...

  5. POJ 3080 Blue Jeans(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=3080 [题目大意] 求k个串的最长公共子串,如果存在多个则输出字典序最小,如果长度小于3则判断查找失败. [题解] 将所有字符串通 ...

  6. Linux-NGINX 能否添加P3P头,如何添加。 - 德问:编程社交问答

    Linux-NGINX 能否添加P3P头,如何添加. - 德问:编程社交问答   您的投票让 杜鑫 声誉值增加5分. 支持投票,不仅能让提问用户获得声誉值,让好的问题有更多的曝光,更能帮助社区筛选出好 ...

  7. 【D3.V3.js系列教程】--(十二)坐标尺度

    [D3.V3.js系列教程]--(十二)坐标尺度 1.多种类型的缩放尺度 Quantitative Scales Linear Scales Identity Scales Power Scales ...

  8. 纯代码 自己主动屏幕适配iPhone button

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2h1bmdlc2hpaHVhdGlhbg==/font/5a6L5L2T/fontsize/400/fil ...

  9. JavaSE_ 反射 目录(27)

    JavaSE学习总结第27天_反射 & 设计模式 & JDK5.7.8新特性27.01 反射_类的加载概述和加载时机27.02 反射_类加载器的概述和分类27.03 反射_反射概述27 ...

  10. 2045不容易系列之(3)—— LELE的RPG难题

    Problem Description人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即”可乐”),经过多方打探,某资深Cole终于知道了原因,原 ...