最大流算法魔板
来源:互联网 发布:基金从业考试题型 知乎 编辑:程序博客网 时间:2024/05/05 03:28
//最大流算法魔板struct Edge{ int from,to,cap,flow; Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}};vector<Edge>edge;vector<int>G[maxn];int n,s,t;//n个点,源点标号s,汇点t //EK专用:============================================================================== int a[maxn];int p[maxn]; //====================================================================================== //Dinicz专用:============================================================================ bool vis[maxn];int d[maxn];int cur[maxn];//======================================================================================void init(int n){ for(int i=0;i<n;i++)G[i].clear(); edge.clear();}void add_edge(int from,int to,int cap){ edge.push_back(Edge(from,to,cap,0)); edge.push_back(Edge(to,from,0,0)); int lm=edge.size(); G[from].push_back(lm-2); G[to].push_back(lm-1);}//Efmonds_Karpint maxflow(int s,int t){ int flow=0; while(1) { memset(a,0,sizeof(a)); queue<int>Q; Q.push(s); a[s]=inf; while(!Q.empty()) { int x=Q.front();Q.pop(); for(int i=0;i<G[x].size();i++) { Edge& e=edge[G[x][i]]; if(!a[e.to]&&e.cap>e.flow) { p[e.to]=G[x][i]; a[e.to]=min(a[x],e.cap-e.flow); Q.push(e.to); } } if(a[t])break; } if(!a[t])break; for(int u=t;u!=s;u=edge[p[u]].from) { edge[p[u]].flow+=a[t]; edge[p[u]^1].flow-=a[t]; } flow+=a[t]; } return flow;}//Dinicbool bfs(){ memset(vis,0,sizeof(vis)); queue<int>Q; Q.push(s); d[s]=0; vis[s]=1; while(!Q.empty()) { int x=Q.front();Q.pop(); for(int i=0;i<G[x].size();i++) { Edge& e=edge[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=edge[G[x][i]]; if(d[x]+1==d[e.to]&&(f=dfs(e.to,min(a,e.cap-e.flow)))>0) { e.flow+=f; edge[G[x][i]^1].flow-=f; flow+=f; a-=f; if(a==0)break; } } return flow;}int maxflow(int s,int t){ int flow=0; while(bfs()) { memset(cur,0,sizeof(cur)); flow+=dfs(s,inf); } return flow;}
用 POJ - 1459 Power Network 测试了一下,EK 1407ms,Dinic 125ms。
未完待续····
阅读全文
0 0
- 最大流算法魔板
- 最大流算法 -- Dinic算法
- 【算法导论】最大流算法
- 最大流算法模板
- 最大流SAP算法
- 最大流算法
- Dinic算法最大流。。
- 最大流算法模板
- 最大流算法实现
- (转)最大流算法
- 最大流SAP算法
- 最大流SAP算法
- 最大流算法
- 最大流算法
- 最大流算法
- 最大网络流算法
- 最大流算法小结
- 最大流算法
- 【PyQt】Qt designer中Stylesheet使用的注意事项
- list map等
- activiti 获取流程图
- pecemaker+heartbeat高可用
- 【设计模式】Chain of Responsibility 责任链式模式
- 最大流算法魔板
- POJ
- 几种加密方式
- 通讯录
- tomcat+memcahed 缓存
- Android6.0 X86 ARM64位可用的注入Inject
- 06-图3 六度空间 (30分)
- Linux下创建、删除软链接
- 二叉树的查找、二叉树高度、二叉树获得双亲结点、构造二叉树、二叉树的广义表表示法、二叉树的插入删除、二叉树的非递归实现