博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LOJ 117 有源汇有上下界最小流
阅读量:6516 次
发布时间:2019-06-24

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

思路

首先加上t-s的边跑最大流

设d是加上的边的流量,删掉加上的边
答案是d-maxflow(t,s)

代码

#include 
#include
#include
#include
#include
#define int long longusing namespace std;const int MAXN = 50100;const int INF = 0x3f3f3f3f;struct Edge{ int u,v,cap,flow;};vector
G[MAXN];vector
edges;int n,m,d[MAXN],sumx,lower[200000],ss,tt,vis[MAXN],dep[MAXN],cur[MAXN],s,t;void addedge(int u,int v,int cap){ edges.push_back((Edge){u,v,cap,0}); edges.push_back((Edge){v,u,0,0}); int cnt=edges.size(); G[u].push_back(cnt-2); G[v].push_back(cnt-1);}void addedge(int u,int v,int cap,int lower){ addedge(u,v,cap-lower); d[u]+=lower; d[v]-=lower; }int dfs(int x,int a,int tx){ if(x==tx||a==0) return a; int flow=0,f; for(int &i=cur[x];i
0){ flow+=f; e.flow+=f; edges[G[x][i]^1].flow-=f; a-=f; if(!a) break; } } return flow;}queue
q;bool bfs(int sx,int tx){ memset(vis,0,sizeof(vis)); dep[sx]=0; q.push(sx); vis[sx]=1; while(!q.empty()){ int x=q.front(); q.pop(); for(int i=0;i
e.flow){ dep[e.v]=dep[x]+1; vis[e.v]=true; q.push(e.v); } } } return vis[tx];}int dinic(int sx,int tx){ int flow=0; while(bfs(sx,tx)){ memset(cur,0,sizeof(cur)); flow+=dfs(sx,INF,tx); } return flow;}signed main(){ // freopen("1.in","r",stdin); // freopen("1.out","w",stdout); scanf("%lld %lld %lld %lld",&n,&m,&s,&t); for(int i=1;i<=m;i++){ int a,b,c; scanf("%lld %lld %lld %lld",&a,&b,&lower[i],&c); addedge(a,b,c,lower[i]); } ss=MAXN-2; tt=MAXN-3; for(int i=1;i<=n;i++){ if(d[i]>0){ addedge(i,tt,d[i]); sumx+=d[i]; } else{ addedge(ss,i,-d[i]); } } addedge(t,s,INF,0); int max_flow=dinic(ss,tt); // printf("sumx=%lld maxflow=%lld\n",sumx,max_flow); if(sumx==max_flow){ int d=edges[G[t][G[t].size()-1]].flow; G[s].pop_back(); G[t].pop_back(); printf("%lld\n",d-dinic(t,s)); } else{ printf("please go home to sleep\n"); } return 0;}

转载于:https://www.cnblogs.com/dreagonm/p/10803040.html

你可能感兴趣的文章
Money去哪了- 每日站立会议
查看>>
Python数据结构和算法学习笔记1
查看>>
正则之从dom字符串中提取url
查看>>
大数据——基础概念
查看>>
机器学习温和指南
查看>>
最短路-Bellman-Ford算法
查看>>
Object 类有哪些方法
查看>>
oracle 将一个表复制到另外一个表里 .
查看>>
leetcode--
查看>>
访问者模式
查看>>
jQuery清空标签内容--防止内存泄露
查看>>
关于 HandlerMethodArgumentResolver 类 以及 WebArgumentResolver 类 自定义解析参数
查看>>
比RBAC更好的权限认证方式(Auth类认证)
查看>>
httpd之编译安装详解
查看>>
服务器磁盘采购分析
查看>>
PHP中is_callable()函数的用法详解
查看>>
Node.js股票模拟交易后台
查看>>
android动画
查看>>
新书试读_信息系统项目管理师考试考点分析与真题详解
查看>>
LVS Nginx HAProxy 优缺点
查看>>