网络流(模板)
来源:互联网 发布:苏豪控股网络 编辑:程序博客网 时间:2024/05/17 04:33
理论:http://mindlee.net/2011/11/19/network-flow/
//Edmonds-Karp(EK)hdu3549#include <cstdio>#include <algorithm>#include <queue>using namespace std;const int M=110;const int inf=1<<30;int capacity[M][M],flow[M],pre[M],n,m;queue<int> Q;void init(){ for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) capacity[i][j]=0;}int BFS(int s,int t){ for (long i=1;i<=n;++i) pre[i]=-1;while (!Q.empty()) Q.pop(); pre[s]=s; flow[s]=inf; Q.push(s); while (!Q.empty()){ int u=Q.front(); Q.pop(); if (u==t) break; for (int i=1;i<=n;++i) if (pre[i]==-1 && capacity[u][i]>0){ pre[i]=u; flow[i]=std::min(flow[u],capacity[u][i]); Q.push(i); } } if (pre[t]==-1) return -1; else return flow[t];}int MaxFlow(int s,int t){ int SumFlow=0,temp; while (temp=BFS(s,t)!=-1){ long k=t; while (k!=pre[k]){ capacity[pre[k]][k]-=temp; capacity[k][pre[k]]+=temp; k=pre[k]; } SumFlow+=temp; } return SumFlow;}int main(){ int t; scanf("%d",&t); for (int i=1;i<=t;++i){ scanf("%d%d",&n,&m); init(); for (int j=1;j<=m;++j){ int u,v,c; scanf("%d%d%d",&u,&v,&c); if (u==v) continue; capacity[u][v]+=c; } printf("Case %d: %d\n",i,MaxFlow(1,n)); } return 0;}
- 网络流(模板)
- 网络流(模板 转)
- 【模板】ISAP网络最大流 (模板题:洛谷P3376)
- 网络流(最大流+模板)
- 网络最大流(dinic)【模板】
- 网络最大流(SAP)【模板】
- Drainage Ditches(网络流_EK模板)
- 网络最大流(SAP)模板
- 网络最大流(dinic)模板
- 网络流模板(更新中)
- 网络最大流模板(标号法)
- 网络流EK算法(模板)
- 网络流DINIC算法(模板)
- 【模板】网络最大流 (Dinic)
- 网络最大流:模板(优化后)
- 【网络流各种模板】
- 【模板】网络流
- 网络流模板--dinic
- poj2553The Bottom of a Graph(强连通+缩点)
- POJ - 3624 《Charm Bracelet》 【0-1背包】
- win8下安卓SDK Manager一闪而过解决方案
- C# 网络编程之Tcp实现客户端和服务器聊天
- Java命名规范
- 网络流(模板)
- 最健康的作息时间表
- poj 3328 Cliff Climbing 题解
- 快速排序
- 算法-折半查找
- python单例模式
- 读取SIM卡的状态理论说明
- NYOJ 12-喷水装置二
- oracle 函数