Flow Problem HDU - 3549

Network flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph. 

InputThe first line of input contains an integer T, denoting the number of test cases. 
For each test case, the first line contains two integers N and M, denoting the number of vertexes and edges in the graph. (2 <= N <= 15, 0 <= M <= 1000) 
Next M lines, each line contains three integers X, Y and C, there is an edge from X to Y and the capacity of it is C. (1 <= X, Y <= N, 1 <= C <= 1000)OutputFor each test cases, you should output the maximum flow from source 1 to sink N.Sample Input

  1. 2
  2. 3 2
  3. 1 2 1
  4. 2 3 1
  5. 3 3
  6. 1 2 1
  7. 2 3 1
  8. 1 3 1

Sample Output

  1. Case 1: 1
  2. Case 2: 2
  3.  
  4. 题意:网络流模版题,1n的结点的最大的流
    思路:用dinic
  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<map>
  4. #include<string.h>
  5. #include<queue>
  6. #include<vector>
  7. #include<math.h>
  8. #include<algorithm>
  9. #define inf 0x3f3f3f3f
  10. using namespace std;
  11. int dis[];
  12. int flow[][];
  13. int n,m;
  14. int bfs()
  15. {
  16. memset(dis,-,sizeof(dis));
  17. queue<int>Q;
  18. dis[]=;
  19. Q.push();
  20. while(!Q.empty())
  21. {
  22. int top=Q.front();
  23. Q.pop();
  24. for(int i=;i<=n;i++)
  25. {
  26. if(flow[top][i]>&&dis[i]<)
  27. {
  28. dis[i]=dis[top]+;
  29. Q.push(i);
  30. }
  31. }
  32. }
  33. if(dis[n]>)return ;
  34. return ;
  35. }
  36. int dinic(int x,int k)
  37. {
  38. if(x==n)
  39. return k;
  40. int y;
  41. for(int i=;i<=n;i++)
  42. {
  43. if(flow[x][i]>&&dis[i]==dis[x]+&&(y=dinic(i,min(k,flow[x][i]))))
  44. {
  45. flow[x][i]-=y;
  46. flow[i][x]+=y;
  47. return y;
  48. }
  49. }
  50. return ;
  51.  
  52. }
  53. int main()
  54. {
  55. int t;
  56. scanf("%d",&t);
  57. int cas=;
  58. while(t--)
  59. {
  60. memset(flow,,sizeof(flow));
  61. scanf("%d%d",&n,&m);
  62. int a,b,c;
  63. for(int i=;i<m;i++)
  64. {
  65. scanf("%d%d%d",&a,&b,&c);
  66. flow[a][b]+=c;
  67. }
  68. int ans=;
  69. while(bfs())
  70. {
  71. //cout<<"++"<<endl;
  72. int res;
  73. while(res=dinic(,inf))ans+=res;
  74. }
  75. printf("Case %d: %d\n",cas++,ans);
  76. }
  77. }

用sap加邻接矩阵,maze那里是叠加,不是覆盖

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<sstream>
  6. #include<cmath>
  7. #include<stack>
  8. #include<cstdlib>
  9. #include <vector>
  10. #include<queue>
  11. using namespace std;
  12.  
  13. #define ll long long
  14. #define llu unsigned long long
  15. #define INF 0x3f3f3f3f
  16. #define PI acos(-1.0)
  17. const int maxn = 1e3+;
  18. const int mod = 1e9+;
  19.  
  20. int maze[maxn][maxn];
  21. int gap[maxn],dis[maxn],pre[maxn],cur[maxn];
  22.  
  23. int sap(int start,int end ,int nodenum)
  24. {
  25. memset(cur,,sizeof cur);
  26. memset(dis,,sizeof dis);
  27. memset(gap,,sizeof gap);
  28. int u = pre[start] = start,maxflow = ,aug = -;
  29. gap[] = nodenum;
  30. while(dis[start] < nodenum)
  31. {
  32. loop:
  33. for(int v = cur[u];v < nodenum; v++)
  34. if(maze[u][v] && dis[u] == dis[v] + ){
  35. if(aug == - || aug > maze[u][v])
  36. aug = maze[u][v];
  37. pre[v] = u;
  38. u = cur[u] = v;
  39. if(v == end)
  40. {
  41. maxflow += aug;
  42. for(u = pre[u]; v!=start;v=u,u=pre[u])
  43. {
  44. maze[u][v] -= aug;
  45. maze[v][u] += aug;
  46. }
  47. aug = -;
  48. }
  49. goto loop;
  50. }
  51. int mindis = nodenum - ;
  52. for(int v = ;v<nodenum;v++)
  53. if(maze[u][v] && mindis > dis[v])
  54. {
  55. cur[u] = v;
  56. mindis = dis[v];
  57. }
  58. if((--gap[dis[u]]) == )
  59. break;
  60. gap[dis[u] = mindis + ]++;
  61. u = pre[u];
  62.  
  63. }
  64. return maxflow;
  65. }
  66.  
  67. int main()
  68. {
  69. int t;
  70. scanf("%d",&t);
  71. for(int ca = ;ca <= t; ca++)
  72. {
  73. memset(maze,,sizeof maze);
  74. int n,m;
  75. scanf("%d%d",&n,&m);
  76. for(int i=;i<m;i++)
  77. {
  78. int a,b,l;
  79. scanf("%d%d%d",&a,&b,&l);
  80. maze[a-][b-] += l;
  81. }
  82. int res = sap(,n-,n);
  83. printf("Case %d: %d\n",ca,res);
  84. }
  85. }

Flow Problem HDU - 3549的更多相关文章

  1. HDU 3549 Flow Problem(最大流)

    HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...

  2. hdu 3549 Flow Problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Description Network flow is a well- ...

  3. hdu 3549 Flow Problem【最大流增广路入门模板题】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...

  4. 网络流 HDU 3549 Flow Problem

    网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...

  5. hdu 3549 Flow Problem Edmonds_Karp算法求解最大流

    Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...

  6. HDU 3549 Flow Problem 网络流(最大流) FF EK

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  7. hdu 3549 Flow Problem (网络最大流)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. HDU 3549 基础网络流EK算法 Flow Problem

    欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit ...

  9. HDU 3549 Flow Problem (最大流ISAP)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

随机推荐

  1. php 转码函数 你还在用iconv吗?-- 解决sqlserver插入中文失败问题

    文章来源 :http://www.veryhuo.com/a/view/41348.html 这次给客户同步sqlserver数据,临时搭的 PHP Query Analyzer 插入某些中文一直有些 ...

  2. using System.Web.Script.Serialization

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

  3. 【踩坑】socket.io服务器不能访问

    今天在单机测试socket.io服务器时一切正常,但用jar包的方式部署在服务器时发现客户端无法连接. 于是做了一系列排查,如检查端口是否在占用,防火墙有没有开放该端口,阿里云终端是否有开放安全组,本 ...

  4. vue+element-ui实现cookie登录

    //效果 //login.vue <template> <div> <el-form :model="ruleForm" :rules="r ...

  5. xaml实现无边框窗口

    <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/w ...

  6. uLua学习之读取外部Lua脚本(四)

    前言 上节说到了Lua脚本与unity3d中C#脚本的数据交互,但是我感觉上节中的数理方式不太好,因为我们是把Lua脚本以字符串形式粘贴到C#脚本中的,如果读取配置数据都这样做的话,那就太可怕了.想想 ...

  7. python super用法

    普通继承 class FooParent(object): def __init__(self): self.parent = 'I\'m the parent.' print 'Parent' de ...

  8. C#之linq

    本文根据30分钟LINQ教程学习作的笔记. 1.Guid.Empty Guid 结构: 表示全局唯一标识符 (GUID).Empty字段:Guid 结构的只读实例,其值均为零.用来设置初始值.   G ...

  9. LeetCode Move Zeroes (简单题)

    题意: 给定一个整型数组nums,要求将其中所有的0移动到末尾,并维护所有非0整数的相对位置不变. 思路: 扫一遍,两个指针维护0与非0的交界,将非0的数向前赋值就行了. C++ class Solu ...

  10. IOS 隐式动画(非Root Layer)

    ● 每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根 层) ● 所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动 ...