poj1273&&nefu473Drainage DitchesHal Burch(最大流)
来源:互联网 发布:rational rose是否mac 编辑:程序博客网 时间:2024/06/05 14:20
这题是标准的入门模板题,不过因为点是从0开始的,而这道题目是没有0的,所以要不然就在prepare语句那里写成prepare(m+1,1,m),要不然就从0开始,把每个点减一
#include<stdio.h>#include<iostream>using namespace std;const int oo=1e9;/**oo 表示无穷大*/const int mm=111111111;/**mm 表示边的最大数量,记住要是原图的两倍,在加边的时候都是双向的*/const int mn=999;/**mn 表示点的最大数量*/int node,src,dest,edge;/**node 表示节点数,src 表示源点,dest 表示汇点,edge 统计边数*/int ver[mm],flow[mm],next[mm];/**ver 边指向的节点,flow 边的容量 ,next 链表的下一条边*/int head[mn],work[mn],dis[mn],q[mn];void prepare(int _node, int _src,int _dest){ node=_node,src=_src,dest=_dest; for(int i=0; i<node; ++i)head[i]=-1; edge=0;}/**增加一条 u 到 v 容量为 c 的边*/void addedge( int u, int v, int c){ ver[edge]=v,flow[edge]=c,next[edge]=head[u],head[u]=edge++; ver[edge]=u,flow[edge]=0,next[edge]=head[v],head[v]=edge++;}/**广搜计算出每个点与源点的最短距离,如果不能到达汇点说明算法结束*/bool Dinic_bfs(){ int i,u,v,l,r=0; for(i=0; i<node; ++i)dis[i]=-1; dis[q[r++]=src]=0; for(l=0; l<r; ++l) for(i=head[u=q[l]]; i>=0; i=next[i]) if(flow[i]&&dis[v=ver[i]]<0) { /**这条边必须有剩余容量*/ dis[q[r++]=v]=dis[u]+1; if(v==dest) return 1; } return 0;}/**寻找可行流的增广路算法,按节点的距离来找,加快速度*/int Dinic_dfs( int u, int exp){ if(u==dest) return exp; /**work 是临时链表头,这里用 i 引用它,这样寻找过的边不再寻找*/ for( int &i=work[u],v,tmp; i>=0; i=next[i]) if(flow[i]&&dis[v=ver[i]]==dis[u]+1&&(tmp=Dinic_dfs(v,min(exp,flow[i])))>0) { flow[i]-=tmp; flow[i^1]+=tmp; /**正反向边容量改变*/ return tmp; } return 0;}int Dicnic_flow(){ int i,ret=0,delta; while(Dinic_bfs()) { for(i=0; i<node; ++i)work[i]=head[i]; while(delta=Dinic_dfs(src,oo))ret+=delta; } return ret;}int main(){ int n,m,u,v,w; ios::sync_with_stdio(false); while(cin>>n>>m) { prepare(m,0,m-1); for(int i=1; i<=n; i++) { cin>>u>>v>>w; addedge(u-1,v-1,w); } int sum=Dicnic_flow(); cout<<sum<<endl; }}
0 0
- poj1273&&nefu473Drainage DitchesHal Burch(最大流)
- nefu 473 Drainage DitchesHal Burch 最大流
- POJ1273(最大流)
- poj1273 最大流
- 最大流poj1273
- poj1273 最大流
- 最大流poj1273
- 最大流--poj1273
- poj1273 (最大流)
- poj1273(最大流)
- poj1273(最大流)
- nefu474The Perfect StallHal Burch(最大流)
- poj1273——最大流
- 网络最大流poj1273,hdoj1532
- POJ1273 Drainage Ditches(最大流)
- POJ1273 Drainage Ditches 【最大流】
- 网络流最大流模板(poj1273)
- poj1273(网络流最大流dinic)
- Universal-Image-Loader源码阅读(38)-ImageLoaderEngine
- springmvc-学习笔记(3)
- 机器学习算法汇总
- 时间特效
- Go-Notepad++
- poj1273&&nefu473Drainage DitchesHal Burch(最大流)
- Oracle的substr函数简单用法
- C语言(循环结构)
- 【指导】配置 OpenLDAP Pasword policy (ppolicy)
- 第二十八条:利用有限通配符提升API的灵活性
- Dubbo框架入门介绍
- 注释的开源框架
- 数据库日期函数(extract)
- thingking in java test5.9练习(19)(20)(21)(22)