题意:给出所有计算机之间的路径和路径容量后,求出两个给定结点之间的流通总容量。(假设路径是双向的,且两方向流动的容量相同)

分析:裸最大流。标号从1开始,初始化的时候注意。

  1. #pragma comment(linker, "/STACK:102400000, 102400000")
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cctype>
  6. #include<cmath>
  7. #include<iostream>
  8. #include<sstream>
  9. #include<iterator>
  10. #include<algorithm>
  11. #include<string>
  12. #include<vector>
  13. #include<set>
  14. #include<map>
  15. #include<stack>
  16. #include<deque>
  17. #include<queue>
  18. #include<list>
  19. #define Min(a, b) ((a < b) ? a : b)
  20. #define Max(a, b) ((a < b) ? b : a)
  21. const double eps = 1e-8;
  22. inline int dcmp(double a, double b){
  23. if(fabs(a - b) < eps) return 0;
  24. return a > b ? 1 : -1;
  25. }
  26. typedef long long LL;
  27. typedef unsigned long long ULL;
  28. const int INT_INF = 0x3f3f3f3f;
  29. const int INT_M_INF = 0x7f7f7f7f;
  30. const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
  31. const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
  32. const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
  33. const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
  34. const int MOD = 1e9 + 7;
  35. const double pi = acos(-1.0);
  36. const int MAXN = 100 + 10;
  37. const int MAXT = 10000 + 10;
  38. using namespace std;
  39. struct Edge{
  40. int from, to, cap, flow;
  41. Edge(int fr, int t, int c, int fl):from(fr), to(t), cap(c), flow(fl){}
  42. };
  43. struct Dinic{
  44. int n, m, s, t;
  45. vector<Edge> edges;
  46. vector<int> G[MAXN];
  47. bool vis[MAXN];
  48. int d[MAXN];
  49. int cur[MAXN];
  50. void init(int n){
  51. edges.clear();
  52. for(int i = 1; i <= n; ++i) G[i].clear();//标号从1开始
  53. }
  54. void AddEdge(int from, int to, int cap){
  55. edges.push_back(Edge(from, to, cap, 0));
  56. edges.push_back(Edge(to, from, 0, 0));
  57. m = edges.size();
  58. G[from].push_back(m - 2);
  59. G[to].push_back(m - 1);
  60. }
  61. bool BFS(){
  62. memset(vis, 0, sizeof vis);
  63. queue<int> Q;
  64. Q.push(s);
  65. d[s] = 0;
  66. vis[s] = 1;
  67. while(!Q.empty()){
  68. int x = Q.front();
  69. Q.pop();
  70. for(int i = 0; i < G[x].size(); ++i){
  71. Edge& e = edges[G[x][i]];
  72. if(!vis[e.to] && e.cap > e.flow){
  73. vis[e.to] = 1;
  74. d[e.to] = d[x] + 1;
  75. Q.push(e.to);
  76. }
  77. }
  78. }
  79. return vis[t];
  80. }
  81. int DFS(int x, int a){
  82. if(x == t || a == 0) return a;
  83. int flow = 0, f;
  84. for(int& i = cur[x]; i < G[x].size(); ++i){
  85. Edge& e = edges[G[x][i]];
  86. if(d[x] + 1 == d[e.to] && (f = DFS(e.to, Min(a, e.cap - e.flow))) > 0){
  87. e.flow += f;
  88. edges[G[x][i] ^ 1].flow -= f;
  89. flow += f;
  90. a -= f;
  91. if(a == 0) break;
  92. }
  93. }
  94. return flow;
  95. }
  96. int Maxflow(int s, int t){
  97. this -> s = s;
  98. this -> t = t;
  99. int flow = 0;
  100. while(BFS()){
  101. memset(cur, 0, sizeof cur);
  102. flow += DFS(s, INT_INF);
  103. }
  104. return flow;
  105. }
  106. }di;
  107. int main(){
  108. int n;
  109. int kase = 0;
  110. while(scanf("%d", &n) == 1){
  111. if(!n) return 0;
  112. di.init(n);
  113. int s, t, c;
  114. scanf("%d%d%d", &s, &t, &c);
  115. for(int i = 0; i < c; ++i){
  116. int x, y, v;
  117. scanf("%d%d%d", &x, &y, &v);
  118. di.AddEdge(x, y, v);//路径双向
  119. di.AddEdge(y, x, v);
  120. }
  121. printf("Network %d\nThe bandwidth is %d.\n\n", ++kase, di.Maxflow(s, t));
  122. }
  123. return 0;
  124. }

  

UVA - 820 Internet Bandwidth (因特网带宽)(最大流)的更多相关文章

  1. UVA 820 Internet Bandwidth 因特网宽带(无向图,最大流,常规)

    题意:给一个无向图,每条边上都有容量的限制,要求求出给定起点和终点的最大流. 思路:每条无向边就得拆成2条,每条还得有反向边,所以共4条.源点汇点已经给出,所以不用建了.直接在图上跑最大流就可以了. ...

  2. UVA - 820 Internet Bandwidth(最大流模板题)

    题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...

  3. UVa 820 Internet Bandwidth (裸板网络流)

    题意:有一个计算机网络,输入节点数n,输入网络流源点和汇点src,des,再输入双向边数m.给出m条边的负载,求最大流. 析:直接上网络流的最大流. 代码如下: #pragma comment(lin ...

  4. UVA 820 Internet Bandwidth

    题意: 给出双向图,求给出两点的流通总流量. 分析: 网络流中的增广路算法. 代码: #include <iostream>#include <cstring>#include ...

  5. UVA 820 --- POJ 1273 最大流

    找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的 ...

  6. UVA 10480 Sabotage (网络流,最大流,最小割)

    UVA 10480 Sabotage (网络流,最大流,最小割) Description The regime of a small but wealthy dictatorship has been ...

  7. light oj 1153 - Internet Bandwidth【网络流无向图】

    1153 - Internet Bandwidth   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...

  8. Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负

    /** 题目:Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负 链接:https://vjudge.net/problem/UVA-1161 ...

  9. UVa 820 因特网带宽(最大流)

    https://vjudge.net/problem/UVA-820 题意: 给出所有计算机之间的路径和路径容量后求出两个给定结点之间的流通总容量. 思路: 裸的最大流问题.注意有个比较坑的地方,最后 ...

随机推荐

  1. 大公司病,为什么要PPT背锅?

    新东方年会上,一曲吐槽式的<释放自我>火遍网络,据说这六位员工,是冒着被解雇的风险完成演出的,歌词内容涉及到非常敏感的大企业病,如机构臃肿.效率低下.内耗甩锅.拍领导马屁等等,而最高潮的部 ...

  2. 使用IDEA,Eclispe搭建Spring Boot项目

    如何创建一个Spring Boot项目?这里使用maven来进行依赖管理,根据常用的IDE,可以使用IDEA.Eclipse.或者访问官方网站搭建. 项目搭建环境准备 JDK:1.8 MAVEN:3. ...

  3. 【随缘更(gu)】牛客D4简要思路(没有题解)

    T1 当然不能枚举每个区间,于是我们考虑算贡献. 对于每个位置i,我们计算其作为区间内第一个出现ai的位置的区间总数,则有ans=sigma( i - last[i] ) * ( n - i + 1 ...

  4. 「NOIP2010」引水入城

    传送门 Luogu 解题思路 第一问很好做,只要总第一行的每一个点都跑一边dfs,判断最后一行是否有点标记不了即可. 考虑处理第二问. 其实这一问就是: 把第一行的点都看做是对最后一行一些点的覆盖,求 ...

  5. Vue项目中v-for无法渲染数据

    在Vue项目中,我们想要实现下面的布局效果 后端返回的数据格式如下,可以看出产品列表五张图的数据位于同一个数组中 而我的html结构如下: 我希望直接渲染左边一张大图,然后右边的四张小图通过v-for ...

  6. Matplotlib 饼图

    章节 Matplotlib 安装 Matplotlib 入门 Matplotlib 基本概念 Matplotlib 图形绘制 Matplotlib 多个图形 Matplotlib 其他类型图形 Mat ...

  7. 基于Python的大数据的分页模型代码

    最近在写一个cmdb系统的分页,尽管Django本身有分页的模块儿,但是还是想实现一下自己心中想的分页的一种逻辑 因为,在我们工作当中,当我们的数据量超级大的时候,其实我们每次分页查询都不必将所有的数 ...

  8. 今日份学习:初步的springboot

    今日记录 今日份BUG清单 flyway的sql文件有两个下划线 __ , _ 是不可以的. 高版本的freemarker默认的扩展名变成了flth,而不是ftl 今日份用到的网址 1. freema ...

  9. 免费的 Linux 分区管理器使用介绍

    下面的列表没有特定的排名顺序.大多数分区工具应该存在于 Linux 发行版的仓库中. GParted 这可能是 Linux 发行版中最流行的基于 GUI 的分区管理器.你可能已在某些发行版中预装它.如 ...

  10. XV6源代码阅读-同步机制

    Exercise1 源代码阅读 锁部分:spinlock.h/spinlock.c以及相关其他文件代码 // Mutual exclusion lock. struct spinlock { uint ...