题意:有一个计算机网络,输入节点数n,输入网络流源点和汇点src,des,再输入双向边数m。给出m条边的负载,求最大流。

析:直接上网络流的最大流。

代码如下:

  1. #pragma comment(linker, "/STACK:1024000000,1024000000")
  2. #include <cstdio>
  3. #include <string>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <iostream>
  7. #include <cstring>
  8. #include <set>
  9. #include <queue>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <map>
  13. #include <cctype>
  14. #include <cmath>
  15. #include <stack>
  16. #include <sstream>
  17. #define debug() puts("++++");
  18. #define gcd(a, b) __gcd(a, b)
  19. #define lson l,m,rt<<1
  20. #define rson m+1,r,rt<<1|1
  21. #define freopenr freopen("in.txt", "r", stdin)
  22. #define freopenw freopen("out.txt", "w", stdout)
  23. using namespace std;
  24.  
  25. typedef long long LL;
  26. typedef unsigned long long ULL;
  27. typedef pair<int, int> P;
  28. const int INF = 0x3f3f3f3f;
  29. const double inf = 0x3f3f3f3f3f3f;
  30. const double PI = acos(-1.0);
  31. const double eps = 1e-5;
  32. const int maxn = 100 + 10;
  33. const int mod = 1e6;
  34. const int dr[] = {-1, 0, 1, 0};
  35. const int dc[] = {0, 1, 0, -1};
  36. const char *de[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
  37. int n, m;
  38. const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  39. const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  40. inline bool is_in(int r, int c){
  41. return r >= 0 && r < n && c >= 0 && c < m;
  42. }
  43. struct Edge{
  44. int from, to, cap, flow;
  45. };
  46.  
  47. struct Dinic{
  48. int m, s, t;
  49. vector<Edge> edges;
  50. vector<int> G[maxn];
  51. bool vis[maxn];
  52. int d[maxn];
  53. int cur[maxn];
  54.  
  55. void init(){
  56. edges.clear();
  57. for(int i = 0; i < maxn; ++i) G[i].clear();
  58. }
  59. bool bfs(){
  60. memset(vis, 0, sizeof vis);
  61. queue<int> q;
  62. q.push(s);
  63. d[s] = 0; vis[s] = true;
  64. while(!q.empty()){
  65. int x = q.front(); q.pop();
  66. for(int i = 0; i < G[x].size(); ++i){
  67. Edge &e = edges[G[x][i]];
  68. if(!vis[e.to] && e.cap > e.flow){
  69. vis[e.to] = 1;
  70. d[e.to] = d[x] + 1;
  71. q.push(e.to);
  72. }
  73. }
  74. }
  75. return vis[t];
  76. }
  77.  
  78. int dfs(int x, int a){
  79. if(x == t || a == 0) return a;
  80. int flow = 0, f;
  81. for(int& i = cur[x]; i < G[x].size(); ++i){
  82. Edge& e = edges[G[x][i]];
  83. if(d[x] + 1 == d[e.to] && (f = dfs(e.to, min(a, e.cap-e.flow))) > 0){
  84. e.flow += f;
  85. edges[G[x][i]^1].flow -= f;
  86. flow += f;
  87. a -= f;
  88. if(!a) break;
  89. }
  90. }
  91. return flow;
  92. }
  93.  
  94. int maxflow(int s, int t){
  95. this->s = s; this->t = t;
  96. int flow = 0;
  97. while(bfs()){
  98. memset(cur, 0, sizeof cur);
  99. flow += dfs(s, INF);
  100. }
  101. return flow;
  102. }
  103.  
  104. void addEdge(int from, int to, int cap){
  105. edges.push_back(Edge{from, to, cap, 0});
  106. edges.push_back(Edge{to, from, 0, 0});
  107. m = edges.size();
  108. G[from].push_back(m-2);
  109. G[to].push_back(m-1);
  110. }
  111. };
  112. Dinic dinic;
  113.  
  114. int main(){
  115. int kase = 0;
  116. while(scanf("%d", &n) == 1 && n){
  117. dinic.init();
  118. int s, t, u, v, val;
  119. scanf("%d %d %d", &s, &t, &m);
  120. for(int i = 0; i < m; ++i){
  121. scanf("%d %d %d", &u, &v, &val);
  122. dinic.addEdge(u, v, val);
  123. dinic.addEdge(v, u, val);
  124. }
  125. printf("Network %d\n", ++kase);
  126. printf("The bandwidth is %d.\n\n", dinic.maxflow(s, t));
  127. }
  128. return 0;
  129. }

UVa 820 Internet Bandwidth (裸板网络流)的更多相关文章

  1. UVA 820 Internet Bandwidth

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

  2. UVA - 820 Internet Bandwidth (因特网带宽)(最大流)

    题意:给出所有计算机之间的路径和路径容量后,求出两个给定结点之间的流通总容量.(假设路径是双向的,且两方向流动的容量相同) 分析:裸最大流.标号从1开始,初始化的时候注意. #pragma comme ...

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

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

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

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

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

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

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

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

  7. S5PV210裸板驱动:启动

    以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...

  8. 嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结

    1.在uboot中我可以添加自己的命令,添加的方法是找到一个uboot的命令,然后模仿着去增加属于自己的命令代码以及实现函数就可以 2.记住在使用printf进行调试的时候,在遇到指针或者字符串的时候 ...

  9. 裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

随机推荐

  1. class中的私有属性的访问

    在类中的私有属性设置: class Name(): __init__(self): self.__name = 'arnol'` 如何查看: 1,在类中定义一个方法: def getname(self ...

  2. Appium python自动化测试系列之认识Appium(四)

    ​4.1界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的,一种是没有界面的,首先我们先讲一下有界面的,以及界面有哪些东西. 首先看第一幅图,如果你的是win ...

  3. Android UI经常使用实例 怎样实现欢迎界面(Splash Screen)

    在Android平台下.下载一个应用后,首次打开映入眼帘的便是Splash Screen,暂且不说Android的设计原则提不提倡这样的Splash Screen.先来看看一般使用Splash Scr ...

  4. asp.net 列表控件

    web空间类都被放置在System.Web.UI.WebControls命名空间下1.ListBox  ListBox控件用于创建多选的下拉列表,而可选项是通过ListItem元素来定义的.示例代码如 ...

  5. Recurrent neural networks are very powerful, because they combine two properties

    https://www.cs.toronto.edu/~hinton/csc2535/notes/lec10new.pdf Distributed hidden state that allows t ...

  6. appium(7)-Automating mobile gestures

    While the Selenium WebDriver spec has support for certain kinds of mobile interaction, its parameter ...

  7. STM32 ~ ili9341 横屏驱动代码

    void ili9341_Initializtion(void) { u16 i; RCC->APB2ENR|=<<; //使能PORTB时钟 GPIOB->CRH&= ...

  8. CSS中float与A标签的疑问

    <stype> a{ text-decoration:none; float:left;} </stype> <div class="box1"> ...

  9. 编译Thrift

    按照 https://syslint.com/blog/tutorial/how-to-install-apache-thrift-on-ubuntu-14-04/ 进行, 编译时出现错误 make[ ...

  10. 【转】澄清P问题、NP问题、NPC问题

    首先,原文链接.(这篇文章让我第一次有了感谢腾讯,感谢微信,感谢微信公众号的冲动.总之,非常感谢作者的分享.) 然后:结论图如下 担心万一哪天原网站把这篇文章下线,所以原文内容复制过来. 澄清P问题. ...