Dinic 模板
来源:互联网 发布:qq音乐网站源码 编辑:程序博客网 时间:2024/06/01 09:23
最大流之Dinic 模板
(————————————洛谷P3376)
#include<bits/stdc++.h>#define maxn 1000005#define inf 2147483647using namespace std;int n,S,T,m,num_e=1,ans;int head[maxn],dis[maxn];struct edge{ int to,nex,rest;}e[maxn];void add_edge(int x,int y,int v){ e[++num_e].to=y;e[num_e].nex=head[x];head[x]=num_e;e[num_e].rest=v; e[++num_e].to=x;e[num_e].nex=head[y];head[y]=num_e;e[num_e].rest=0;}bool bfs(){ memset(dis,0,sizeof(dis)); queue<int> q; q.push(S); dis[S]=1; while(!q.empty()){ int x=q.front();q.pop(); for(int i=head[x];i;i=e[i].nex){ int y=e[i].to; if(!dis[y]&&e[i].rest) dis[y]=dis[x]+1,q.push(y); } } if(dis[T]) return true; return false;}int dfs(int x,int minn){ if(x==T) return minn; int sum=0,qaq=0; for(int i=head[x];i;i=e[i].nex){ int y=e[i].to; if(dis[y]==dis[x]+1&&e[i].rest){ qaq=dfs(y,min(minn-sum,e[i].rest)); e[i].rest-=qaq; e[i^1].rest+=qaq; sum+=qaq; if(sum==minn) return sum; } } if(!sum) dis[x]=0; return sum;}int dinic(){ int anss=0; while(bfs()) anss+=dfs(S,inf); return anss;}int main(){ scanf("%d%d%d%d",&n,&m,&S,&T); int a,b,c; for(int i=1;i<=m;i++){ scanf("%d%d%d",&a,&b,&c); add_edge(a,b,c); } ans=dinic(); printf("%d",ans); return 0;}
阅读全文
1 0
- Dinic 模板
- dinic 模板
- Dinic模板
- Dinic模板
- Dinic模板
- Dinic模板
- dinic模板
- dinic 模板
- dinic 模板
- (模板) dinic
- 模板-Dinic
- 【Dinic模板】
- dinic 模板
- Dinic模板
- 模板:DINIC
- DINIC 模板
- 【模板】dinic
- dinic模板
- c# winform 获取当前程序运行根目录
- Postman发送Map参数
- [Azure]使用Powershell克隆ARM虚拟机(托管磁盘)
- C# byte数组转化位Bitmap
- 极大似然估计法推出朴素贝叶斯法中的先验概率估计公式
- Dinic 模板
- 【知了堂学习笔记】jfreechart创建简单的柱状图和饼图
- saxbuilder用法
- 传感器SensorManager
- python3.6 下连接mysql数据库实现用户登录与注册
- 矩形滑雪场
- 练习3
- Codeforces Round #430(Div.2) C,D,E题目详解
- Django学习的总结