模板:DINIC
来源:互联网 发布:mp4加速播放软件 编辑:程序博客网 时间:2024/04/29 11:38
题目见USACO草地排水一题
#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<queue>#include<vector>#include<climits>#include<string>#include<cstdlib>#include<set>#include<stack>#include<map>#include<bitset>#include<ctime>using namespace std;typedef long long ll;typedef unsigned long long ull;inline ll read(){ char k=0;char ls;ls=getchar();for(;ls<'0'||ls>'9';k=ls,ls=getchar()); ll x=0;for(;ls>='0'&&ls<='9';ls=getchar())x=x*10+ls-'0'; if(k=='-')x=0-x;return x;}ll n,m;struct E{ ll edge; ll zhi; ll s;}a[3000];ll last[3000];ll back;ll ans;ll d[3000];inline ll bfs(){ queue<ll>q; memset(d,0,sizeof(d)); d[1]=1; q.push(1); while(!q.empty()) { ll u=q.front(); q.pop(); for(int j=last[u];j;j=a[j].zhi) if(a[j].s>0&&d[a[j].edge]==0) { d[a[j].edge]=d[u]+1; q.push(a[j].edge); if(a[j].edge==n) return 1; } } return 0;}inline ll dinic(ll x,ll flow){ ll left=flow; if(x==n) return flow; for(int j=last[x];j;j=a[j].zhi) if(a[j].s>0&&d[a[j].edge]==d[x]+1) { ll temp=dinic(a[j].edge,min(left,a[j].s)); if(!temp)d[a[j].edge]=0; left-=temp; a[j].s-=temp; a[j^1].s+=temp; } return flow-left;}int main(){ //freopen("dt.in","r",stdin); //freopen("dt.out","w",stdout); m=read();n=read(); for(int i=1;i<=m;++i) { ll a1=read(),b1=read(),c1=read(); a[++back].edge=b1;//建立正向边 a[back].zhi=last[a1]; a[back].s=c1; last[a1]=back; a[++back].edge=a1;//建立逆向边 a[back].zhi=last[b1]; a[back].s=0; last[b1]=back; } while(bfs()) ans+=dinic(1,INT_MAX); cout<<ans<<endl; //fclose(stdin); //fclose(stdout); return 0;}
0 0
- Dinic 模板
- dinic 模板
- Dinic模板
- Dinic模板
- Dinic模板
- Dinic模板
- dinic模板
- dinic 模板
- dinic 模板
- (模板) dinic
- 模板-Dinic
- 【Dinic模板】
- dinic 模板
- Dinic模板
- 模板:DINIC
- DINIC 模板
- 【模板】dinic
- dinic模板
- Tyvj_P1010
- Leetcode no. 39
- spring security学习,使用过程
- 剑指offer系列之48:把字符串转换成整数
- Thinkphp笔记3 模型
- 模板:DINIC
- c++第三次上机实验
- C++作业3
- LeetCode *** 59. Spiral Matrix II
- CSS学习笔记(五):盒模式和内容格式化
- linux的常用小技巧
- NSThread创建和启动
- 现阶段的经验总结
- 归并插入排序