UVa 820 Internet Bandwidth (裸板网络流)
题意:有一个计算机网络,输入节点数n,输入网络流源点和汇点src,des,再输入双向边数m。给出m条边的负载,求最大流。
析:直接上网络流的最大流。
代码如下:
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- #include <cstdio>
- #include <string>
- #include <cstdlib>
- #include <cmath>
- #include <iostream>
- #include <cstring>
- #include <set>
- #include <queue>
- #include <algorithm>
- #include <vector>
- #include <map>
- #include <cctype>
- #include <cmath>
- #include <stack>
- #include <sstream>
- #define debug() puts("++++");
- #define gcd(a, b) __gcd(a, b)
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- #define freopenr freopen("in.txt", "r", stdin)
- #define freopenw freopen("out.txt", "w", stdout)
- using namespace std;
- typedef long long LL;
- typedef unsigned long long ULL;
- typedef pair<int, int> P;
- const int INF = 0x3f3f3f3f;
- const double inf = 0x3f3f3f3f3f3f;
- const double PI = acos(-1.0);
- const double eps = 1e-5;
- const int maxn = 100 + 10;
- const int mod = 1e6;
- const int dr[] = {-1, 0, 1, 0};
- const int dc[] = {0, 1, 0, -1};
- const char *de[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
- int n, m;
- const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- inline bool is_in(int r, int c){
- return r >= 0 && r < n && c >= 0 && c < m;
- }
- struct Edge{
- int from, to, cap, flow;
- };
- struct Dinic{
- int m, s, t;
- vector<Edge> edges;
- vector<int> G[maxn];
- bool vis[maxn];
- int d[maxn];
- int cur[maxn];
- void init(){
- edges.clear();
- for(int i = 0; i < maxn; ++i) G[i].clear();
- }
- bool bfs(){
- memset(vis, 0, sizeof vis);
- queue<int> q;
- q.push(s);
- d[s] = 0; vis[s] = true;
- while(!q.empty()){
- int x = q.front(); q.pop();
- for(int i = 0; i < G[x].size(); ++i){
- Edge &e = edges[G[x][i]];
- if(!vis[e.to] && e.cap > e.flow){
- vis[e.to] = 1;
- d[e.to] = d[x] + 1;
- q.push(e.to);
- }
- }
- }
- return vis[t];
- }
- int dfs(int x, int a){
- if(x == t || a == 0) return a;
- int flow = 0, f;
- for(int& i = cur[x]; i < G[x].size(); ++i){
- Edge& e = edges[G[x][i]];
- if(d[x] + 1 == d[e.to] && (f = dfs(e.to, min(a, e.cap-e.flow))) > 0){
- e.flow += f;
- edges[G[x][i]^1].flow -= f;
- flow += f;
- a -= f;
- if(!a) break;
- }
- }
- return flow;
- }
- int maxflow(int s, int t){
- this->s = s; this->t = t;
- int flow = 0;
- while(bfs()){
- memset(cur, 0, sizeof cur);
- flow += dfs(s, INF);
- }
- return flow;
- }
- void addEdge(int from, int to, int cap){
- edges.push_back(Edge{from, to, cap, 0});
- edges.push_back(Edge{to, from, 0, 0});
- m = edges.size();
- G[from].push_back(m-2);
- G[to].push_back(m-1);
- }
- };
- Dinic dinic;
- int main(){
- int kase = 0;
- while(scanf("%d", &n) == 1 && n){
- dinic.init();
- int s, t, u, v, val;
- scanf("%d %d %d", &s, &t, &m);
- for(int i = 0; i < m; ++i){
- scanf("%d %d %d", &u, &v, &val);
- dinic.addEdge(u, v, val);
- dinic.addEdge(v, u, val);
- }
- printf("Network %d\n", ++kase);
- printf("The bandwidth is %d.\n\n", dinic.maxflow(s, t));
- }
- return 0;
- }
UVa 820 Internet Bandwidth (裸板网络流)的更多相关文章
- UVA 820 Internet Bandwidth
题意: 给出双向图,求给出两点的流通总流量. 分析: 网络流中的增广路算法. 代码: #include <iostream>#include <cstring>#include ...
- UVA - 820 Internet Bandwidth (因特网带宽)(最大流)
题意:给出所有计算机之间的路径和路径容量后,求出两个给定结点之间的流通总容量.(假设路径是双向的,且两方向流动的容量相同) 分析:裸最大流.标号从1开始,初始化的时候注意. #pragma comme ...
- UVA 820 Internet Bandwidth 因特网宽带(无向图,最大流,常规)
题意:给一个无向图,每条边上都有容量的限制,要求求出给定起点和终点的最大流. 思路:每条无向边就得拆成2条,每条还得有反向边,所以共4条.源点汇点已经给出,所以不用建了.直接在图上跑最大流就可以了. ...
- UVA - 820 Internet Bandwidth(最大流模板题)
题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...
- light oj 1153 - Internet Bandwidth【网络流无向图】
1153 - Internet Bandwidth PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...
- UVA 820 --- POJ 1273 最大流
找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的 ...
- S5PV210裸板驱动:启动
以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...
- 嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结
1.在uboot中我可以添加自己的命令,添加的方法是找到一个uboot的命令,然后模仿着去增加属于自己的命令代码以及实现函数就可以 2.记住在使用printf进行调试的时候,在遇到指针或者字符串的时候 ...
- 裸板驱动总结(makefile+lds链接脚本+裸板调试)
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...
随机推荐
- class中的私有属性的访问
在类中的私有属性设置: class Name(): __init__(self): self.__name = 'arnol'` 如何查看: 1,在类中定义一个方法: def getname(self ...
- Appium python自动化测试系列之认识Appium(四)
4.1界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的,一种是没有界面的,首先我们先讲一下有界面的,以及界面有哪些东西. 首先看第一幅图,如果你的是win ...
- Android UI经常使用实例 怎样实现欢迎界面(Splash Screen)
在Android平台下.下载一个应用后,首次打开映入眼帘的便是Splash Screen,暂且不说Android的设计原则提不提倡这样的Splash Screen.先来看看一般使用Splash Scr ...
- asp.net 列表控件
web空间类都被放置在System.Web.UI.WebControls命名空间下1.ListBox ListBox控件用于创建多选的下拉列表,而可选项是通过ListItem元素来定义的.示例代码如 ...
- 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 ...
- appium(7)-Automating mobile gestures
While the Selenium WebDriver spec has support for certain kinds of mobile interaction, its parameter ...
- STM32 ~ ili9341 横屏驱动代码
void ili9341_Initializtion(void) { u16 i; RCC->APB2ENR|=<<; //使能PORTB时钟 GPIOB->CRH&= ...
- CSS中float与A标签的疑问
<stype> a{ text-decoration:none; float:left;} </stype> <div class="box1"> ...
- 编译Thrift
按照 https://syslint.com/blog/tutorial/how-to-install-apache-thrift-on-ubuntu-14-04/ 进行, 编译时出现错误 make[ ...
- 【转】澄清P问题、NP问题、NPC问题
首先,原文链接.(这篇文章让我第一次有了感谢腾讯,感谢微信,感谢微信公众号的冲动.总之,非常感谢作者的分享.) 然后:结论图如下 担心万一哪天原网站把这篇文章下线,所以原文内容复制过来. 澄清P问题. ...