博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大流——poj1459
阅读量:5231 次
发布时间:2019-06-14

本文共 1873 字,大约阅读时间需要 6 分钟。

#include
#include
#include
#include
using namespace std;#define maxn 100005#define inf 0x3f3f3f3fstruct Edge{
int to,nxt,w;}e[maxn<<1];int head[maxn],tot,n,m,np,nc,s,t;void init(){ memset(head,-1,sizeof head); tot=0;}void add(int u,int v,int w){ e[tot].to=v;e[tot].w=w;e[tot].nxt=head[u];head[u]=tot++; e[tot].to=u;e[tot].w=0;e[tot].nxt=head[v];head[v]=tot++;}int d[maxn];int bfs(){ memset(d,0,sizeof d); queue
q; q.push(s);d[s]=1; while(q.size()){ int x=q.front();q.pop(); for(int i=head[x];i!=-1;i=e[i].nxt){ int y=e[i].to; if(e[i].w==0 || d[y])continue; d[y]=d[x]+1; q.push(y); if(y==t)return 1; } } return 0;}int dfs(int x,int flow){ if(x==t)return flow; int rest=flow; for(int i=head[x];i!=-1 && rest; i=e[i].nxt){ int y=e[i].to; if(d[y]!=d[x]+1 || e[i].w==0)continue; int k=dfs(y,min(rest,e[i].w)); if(!k)d[y]=0; rest-=k;e[i].w-=k;e[i^1].w+=k; } return flow-rest;}int dinic(){ int ans=0; while(bfs()) while(int flow=dfs(s,inf)) ans+=flow; return ans;}int main(){ while(cin>>n>>np>>nc>>m){ init(); s=0;t=n+1; for(int i=1;i<=m;i++){ int u,v,w; scanf("\n(%d,%d)%d",&u,&v,&w); u++,v++; add(u,v,w); } for(int i=1;i<=np;i++){ int u,w; scanf("\n(%d)%d",&u,&w); ++u; add(s,u,w); } for(int i=1;i<=nc;i++){ int u,w; scanf("\n(%d)%d",&u,&w); ++u; add(u,t,w); } cout<
<<'\n'; }}

 

转载于:https://www.cnblogs.com/zsben991126/p/11004195.html

你可能感兴趣的文章
基础笔记一
查看>>
uva 10137 The trip
查看>>
Count Numbers
查看>>
编写高质量代码改善C#程序的157个建议——建议110:用类来代替enum
查看>>
网卡bond技术
查看>>
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
UNIX基础知识之输入和输出
查看>>
【洛谷 P1666】 前缀单词 (Trie)
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>