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

分析:裸最大流。标号从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. 前端Cannot read property 'disabled' of null 问题解决

    就是在项目中,控制台一直在报这个错,一直没找到是什么问题, 后来经过一番排查,发现是 因为在页面中使用了el-dropdown,但是在这个标签里面没有设置它的子元素,所以会报错,解决的方法就是在el- ...

  2. jq的链式调用.end();

    先上code <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. 「LuoguP3979」遥远的国度

    传送门 Luogu 解题思路 带换根操作的树剖. 换根只会影响更新或查询子树信息的操作. 我们始终保持初始的根不变,然后只要分类讨论一下: 假设当前被查询的节点是 \(u\) 如果 \(u\) 就是根 ...

  4. zabbix4.4安装 centos7+mysql+Nginx

    1.安装数据源 # rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch. ...

  5. String和Date 互相转换

    1.String ->Date String StrDate = "2012-12-12"; SimpleDateFormat sdf=new SimpleDateForma ...

  6. 二十四 Redis消息订阅&事务&持久化

    Redis数据类型: Redis控制5种数据类型:String,list,hash,set,sorted-set 添加数据,删除数据,获取数据,查看有多少个元素,判断元素是否存在 key通用操作 JR ...

  7. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:继承的应用

    class Array{ // 表示数组 private int temp[] ; // 整型数组 private int foot ; // 定义添加位置 public Array(int len) ...

  8. Deepctr框架代码阅读

    DeepCtr是一个简易的CTR模型框架,集成了深度学习流行的所有模型,适合学推荐系统模型的人参考. 我在参加比赛中用到了这个框架,但是效果一般,为了搞清楚原因从算法和框架两方面入手.在读代码的过程中 ...

  9. 本地连接 HDFS 报错 Exception in thread "main" org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=JM.H,access=WRITE, inode="":r

    此时 到hdfs机器下修改hdfs-site.xml即可 添加如下配置 <property> <name>dfs.permissions</name> <va ...

  10. Health Check【转】

    强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精 ...