Dinic 算法模板
来源:互联网 发布:网络服务器配置与管理 编辑:程序博客网 时间:2024/06/07 18:45
#include<cstdio>#include<iostream>#include<vector>#include<cstring>#include<queue>using namespace std;struct edge{ int to, cap, rev; edge(){} edge(int b, int c, int d) :to(b), cap(c), rev(d) {}};const int maxv = 100 + 10;const int maxn = 1000 + 10;const int inf = 0x3f3f3f3f;vector<edge> G[maxv];int level[maxv];int iter[maxv];void add(int from, int to, int cap){ G[from].push_back(edge(to, cap, G[to].size())); G[to].push_back(edge(from, 0, G[from].size() - 1));}void bfs(int s){ memset(level, -1, sizeof level); queue<int> qu; level[s] = 0; qu.push(s); while(qu.size()) { int v = qu.front(); qu.pop(); for(int i= 0; i< G[v].size(); i++) { edge e = G[v][i]; if(e.cap > 0 && level[e.to] < 0) { level[e.to] = level[v] + 1; qu.push(e.to); } } }}int dfs(int v, int t, int f){ if(v == t) return f; for(int &i= iter[v]; i< G[v].size(); i++) { edge &e = G[v][i]; if(e.cap > 0 && level[e.to] > level[v]) { int d = dfs(e.to, t, min(f, e.cap)); if(d > 0) { e.cap -= d; G[e.to][e.rev].cap += d; return d; } } } return 0;}int max_flow(int s, int t){ int flow = 0; while(1) { bfs(s); if(level[t] < 0) return flow; memset(iter, 0, sizeof iter); while(1) { int f = dfs(s, t, inf); if(f == 0) break; flow += f; } }}
阅读全文
0 0
- Dinic 算法模板
- dinic算法模板
- Dinic 算法模板
- 最大流 dinic算法模板
- 最大流 dinic算法 模板
- 网络流Dinic算法详解及模板
- poj 1273最大流dinic算法模板
- 最大流模板(Dinic算法)
- 网络流-Dinic算法详解与模板
- 网络流Dinic算法模板 POJ1273
- Dinic算法 P3376 【模板】网络最大流
- HDU1532(最大流Dinic算法模板题)
- 网络流DINIC算法(模板)
- 最大网络流模板Dinic算法
- Dinic 模板
- dinic 模板
- Dinic模板
- Dinic模板
- 结构语句
- LeetCode
- java对象序列化
- MyBatis的foreach语句详解
- hdu3265Posters(线段树+离散化+扫描线详解 )
- Dinic 算法模板
- Android进阶之路
- Volley 图片加载相关源码解析
- Android 混淆提示 java.io.FileNotFoundException: ...\proguard
- 英语语法5-现在完成时
- 当当网Dubbox
- 关于service中的事物回滚问题
- 用jQuery实现倒计时
- windows平台VR全景播放器,支持图片视频,rtsp,rtmp,http,udp,hls等网络格式