【模板】dinic初体验
来源:互联网 发布:淘宝上怎么搜迷你钢弩 编辑:程序博客网 时间:2024/06/05 21:09
觊觎已久的dinic网络流~
果然还是晓犇讲代码神啊~~~@Starria
第一个板子就在这里开荒留下足迹吧w~
#include<cstdio>#include<algorithm>#define N 1100#define INF 1000000000using namespace std;struct node{ long long to,len,nxt;}table[N<<1];long long tot=2,head[N],queue[N],l,r,n,m,S,T,ans=0;void add(long long x,long long y,long long z){ table[tot].len=z,table[tot].to=y,table[tot].nxt=head[x],head[x]=tot++; table[tot].len=0,table[tot].to=x,table[tot].nxt=head[y],head[y]=tot++; return;}long long vis[N];bool bfs(){ l=r=0; for(long long i=0;i<=n;i++){ vis[i]=0; } vis[S]=1; queue[r++]=S; while(l!=r){ long long t=queue[l++]; for(long long i=head[t];i;i=table[i].nxt){ if((!vis[table[i].to])&&table[i].len){ vis[table[i].to]=vis[t]+1; queue[r++]=table[i].to; } } } if(vis[T]){ return true; } return false;}long long dfs(long long x,long long val){ if(x==T){ return val; } long long res=0; for(long long i=head[x];i;i=table[i].nxt){ if(table[i].len!=0&&vis[table[i].to]==vis[x]+1){ long long chg=dfs(table[i].to,min(val,table[i].len)); table[i].len-=chg,table[i^1].len+=chg,val-=chg,res+=chg; } } return res;}int main(){ scanf("%lld%lld%lld%lld",&n,&m,&S,&T); for(long long i=0;i<m;i++){ long long x,y,z; scanf("%lld%lld%lld",&x,&y,&z); add(x,y,z); } while(bfs()){ans+=dfs(S,INF);}; printf("%lld\n",ans); return 0;}
阅读全文
0 0
- 【模板】dinic初体验
- Dinic 模板
- dinic 模板
- Dinic模板
- Dinic模板
- Dinic模板
- Dinic模板
- dinic模板
- dinic 模板
- dinic 模板
- (模板) dinic
- 模板-Dinic
- 【Dinic模板】
- dinic 模板
- Dinic模板
- 模板:DINIC
- DINIC 模板
- 【模板】dinic
- 在leanote中加入自定义样式表和脚本
- 进程,线程,多线程
- 如何批量把excel中已显示的科学计数法取消
- 各种消息队列介绍
- 安卓模拟器安装失败解决方法dev kvm is not found
- 【模板】dinic初体验
- Problem4: Median of Two Sorted Arrays
- PAT 乙级 1033. 旧键盘打字 C语言
- 第16章part3-STL
- POJ
- 互联网性能与容量评估的方法论和典型案例
- MTD(1)---nand flash的基本知识
- Python 从入门到实践 7-4 课后习题
- mui 子页面回传值到父页面