HDU 3549 Flow Problem 网络流 基础题
来源:互联网 发布:生化危机4mac版 编辑:程序博客网 时间:2024/05/18 00:42
DINIC求网络流最大流
贴代码(AC,125MS)
#include<iostream>#include<queue>#include<cstdlib>#include<vector>#include<cstring>#include<cstdio>using namespace std;const int INF = 0x7f7f7f7f;const int MAXN = 20;const int MAXM = 1005;int n, m, s, t, cnt;int head[MAXN];bool vis[MAXN];int d[MAXN], cur[MAXN], que[MAXN];struct edge_{ int from, to, cap, flow, next;}edge[MAXM];void init(){ memset(head, -1, sizeof(head)); memset(edge, -1, sizeof(edge)); cnt = 0;}void add(int from, int to, int cap){ edge[cnt].from = from, edge[cnt].to = to; edge[cnt].cap = cap, edge[cnt].next = head[from]; edge[cnt].flow = 0; head[from] = cnt++; edge[cnt].from = to, edge[cnt].to = from; edge[cnt].cap = 0, edge[cnt].next = head[to]; edge[cnt].flow = 0; head[to] = cnt++;}bool bfs(){ memset(vis, false, sizeof(vis)); memset(d, 0, sizeof(d)); d[s] = 0, vis[s] = 1, que[0] = s; int tail = 0, front = 1; while(tail < front){ int x = que[tail++]; for(int now = head[x]; ~now; now = edge[now].next){ edge_ &e = edge[now]; if(!vis[e.to] && e.cap > e.flow){ vis[e.to] = 1; d[e.to] = d[x] + 1; que[front++] = e.to; } } } return vis[t];}int dfs(int x, int a){ if(x == t || a == 0) return a; int flow = 0, f; for(int &now = cur[x]; ~now; now = edge[now].next){ edge_ &e = edge[now]; if(d[x] + 1 == d[e.to] && (f = dfs(e.to, min(a, e.cap - e.flow))) > 0){ e.flow +=f; edge[now ^ 1].flow -= f; flow += f; a -= f; if(a == 0) break; } } return flow;}int maxFlow(int _s, int _t, int _n, int _m){ s = _s, t = _t; n = _n, m = _m; int flow = 0; while(bfs()){ for(int i = 1; i <= n; i++) cur[i] = head[i]; flow += dfs(s, INF); } return flow;}int main(){ int n, m, s, t, c, ca = 1, num; scanf("%d", &num); while(num--){ init(); scanf("%d%d", &n, &m); for(int i = 0; i < m; i++){ scanf("%d%d%d", &s, &t, &c); add(s, t, c); } printf("Case %d: %d\n", ca++, maxFlow(1, n, n, m)); } return 0;}
- HDU 3549 Flow Problem 网络流 基础题
- HDU 3549 Flow Problem 最大网络流
- hdu 3549 最大网络流 Flow Problem
- 网络流 HDU 3549 Flow Problem
- hdu 3549 Flow Problem 网络流
- HDU 3549 Flow Problem [网络流]
- HDU--3549 Flow Problem 网络流
- HDU 3549 Flow Problem 网络流 EK
- HDU 3549 Flow Problem(网络流模板题)
- HDU 3549Flow Problem(网络流之最大流)
- HDU 3549 Flow Problem(有向边网络流)
- Flow Problem hdu 3549 网络流模板题目
- hdu 3549 Flow Problem(网络流增广路径主要算法)
- hdu 3549 Flow Problem(图论:网络流增广路)
- HDU- 3549-Flow Problem (网络流之 EK)
- hdu 3549 Flow Problem ek算法,网络流
- hdu 3549 Flow Problem EK算法 网络流
- hdu 3549 Flow Problem(简单网络流Dinic)
- HOG特征-理解篇
- 深入 JAVA里面关于byte数组和String之间的转换问题
- View和viewController的生命周期
- 内存管理内幕
- Windows下基于ADS+J-Link 的ARM开发环境搭建
- HDU 3549 Flow Problem 网络流 基础题
- IE6、IE7不支持二级子ul的问题
- hdu 3292 No more tricks, Mr Nanguo
- 二.Java编程基础(二)
- 20131202 new
- 黑马程序员 java基础加强——jdk1.5新特性—枚举
- Android高效显示图片详解(三)
- 2013年终工作总结
- 利用chrome调试JavaScript代码