模板:最大流最小割
来源:互联网 发布:vb 线程钩子 编辑:程序博客网 时间:2024/06/08 00:43
讲解:https://wenku.baidu.com/view/d9c9b9220722192e4536f6e1.html
基本上是:
先init(),制造超级源点和汇点,根据模型连边,求最大流。
给出矩阵时,转换为边存入edges:
#define mem(a,x) memset(a,x,sizeof(a))using namespace std;const int inf = 0x3f3f3f3f;const int maxn = 50 + 5;const int maxs = maxn*maxn + 5;int n,m,source,sink;int mp[maxn][maxn];struct Edge{ int from,to,cap,flow;};struct Dicnic{ int n,m,s,t; int d[maxs],cur[maxs],vis[maxs]; vector<int>G[maxs]; vector<Edge>edges; void AddEdge(int from,int to,int cap){ Edge e1 = {from,to,cap,0}; Edge e2 = {to,from,0,0}; edges.push_back(e1); edges.push_back(e2); int m = edges.size(); G[from].push_back(m-2); G[to].push_back(m-1); } void init(int n){ this -> n = n; for(int i = 0;i<=n;i++){ G[i].clear(); } edges.clear(); } bool BFS(){ //就是用BFS分了个层而已,一看代码便知 mem(vis,0); queue<int>Q; Q.push(s); vis[s] = 1; d[s] = 0; //mem(d,0); 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){ //就是顺着层次dfs而已 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[e.to]==d[x]+1&&(f = DFS(e.to,min(a,e.cap-e.flow)))>0){ //a是路径上的最小残存容量 e.flow += f; edges[G[x][i]^1].flow -= f; //反向边 flow += f; a -= f; if(a==0) break; //a等于0及时退出,再从s那找一遍,因为从哪断的不知道 } } return flow; } int MaxFlow(int s,int t){ this -> s = s; this ->t = t; int flow = 0; while(BFS()){ mem(cur,0); flow += DFS(s,inf); } return flow; }}g;int drx[] = {0,1,0,-1};int dry[] = {1,0,-1,0};bool valid(int x,int y){ if(x<1||x>n||y<1||y>m) return false; else return true;}int id(int x,int y){ return (x-1)*m + y;}
阅读全文
0 0
- 模板:最大流最小割
- Dinic模板(最大流最小割)
- dinic最大流模板(最小割)
- 最大流/最小割
- 最大流最小割
- 最大流最小割
- 最大流最小割
- 最大流最小割
- hdu 2435(最小割 --dinic模板-- 最大流)
- poj 3469 最大流-最小割 SAP算法模板
- (POJ3308)Paratroopers 最大流最小割,建图,模板题
- 最大流最小割定理
- 最大流-最小割简介
- 最大流最小割定理
- poj3308 最大流最小割
- 最小割转最大流
- 最大流和最小割
- 最小割最大流记录
- MySQL ssl连接错误解决
- 使用 maven 构建模块化项目
- 嵌入式学习总体路线
- 51 Nod 1106 质数检测
- Android JobScheduler
- 模板:最大流最小割
- Linux strict_strtoul 函数
- #PL/SQL DEV连接Oracle 弹出空白提示框的解决方案#
- git_快速入门 00 介绍
- C++笔记:select多路复用机制
- Python(1) python外部模块的安装
- 堆和栈相关知识
- DataFrame与RDD的区别
- 【Leetcode】【python】Permutation Sequence