dinic 板子
来源:互联网 发布:java大学教程 pdf 编辑:程序博客网 时间:2024/05/17 07:26
#include <iostream>#include<stdio.h>#include<string.h>#include<string>#include<queue>using namespace std;const int maxn=99999;const int inf=999999999;int to[maxn];int head[maxn];int next[maxn];int value[maxn];int tot;int src,sink;void init(){ tot=0; memset(head,-1,sizeof(head));}void addedge(int u,int v,int w){ to[tot]=v; next[tot]=head[u]; value[tot]=w; head[u]=tot++;}int dis[maxn];int vis[maxn];queue<int>que;void bfs(){ memset(dis,0,sizeof(dis)); while(!que.empty()) que.pop(); vis[src]=true; que.push(src); while(!que.empty()) { int u=que.front(); que.pop(); for(int i=head[u];i!=-1;i=next[i]) { if(value[i]>0&&vis[to[i]]==0) { que.push(to[i]); dis[to[i]]=dis[u]+1; vis[to[i]]=true; } } }}int dfs(int u,int delta)//rc 源点 sink 汇点{ if(u==sink) { return delta; } int ret=0; for(int i=head[u];i!=-1&δi=next[i]) { if(value[i]>0&&dis[to[i]]==dis[u]+1) { int dd=dfs(to[i],min(value[i],delta)); value[i]-=dd; value[i^1]+=dd; delta-=dd; ret+=dd; } } return ret;}int maxflow(){ int ret=0; while(true) { memset(vis,0,sizeof(vis)); bfs(); if(!vis[sink]) return ret; ret+=dfs(src,inf); } return 0;}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { init(); for(int i=1;i<=n;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); addedge(a,b,c); addedge(b,a,0); } src=1; sink=m; printf("%d\n",maxflow()); } return 0;}
0 0
- dinic 板子
- 【板子】Dinic算法
- 网络流板子之 dinic板子
- poj1273 Drainage Ditches(最大流dinic板子)
- 板子
- 板子
- dinic
- dinic
- Dinic
- Dinic
- dinic
- Dinic
- dinic
- Dinic
- dinic
- dinic
- Dinic
- dinic
- 泰课在线逃离地球
- 之嵌入式微处理器的结构和类型(2.1)------嵌入式微处理器与接口知识
- java中的同步与异步
- WebService实战
- 【机房收费系统】总结知识点
- dinic 板子
- Java基础查漏补缺:(开篇)为什么要在即将找工作的时候还在看Java基础
- ROS学习--(四)创建ROS Package
- fatal error LNK1169: 找到一个或多个多重定义的符号
- HTML5基础11----HTML5布局的使用,div布局
- PHP文件操作之读写
- linux下tomcat6.0与jdk安装详细步骤 .
- SmartImageView
- 绿色astah简体中文版6.8