【算法】有上下界网络流-无源汇(循环流)

【题解】http://www.cnblogs.com/onioncyc/p/6496532.html

//未提交
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=,maxm=,inf=0x3f3f3f3f;
struct edge{int from,v,flow;}e[maxm];
int S,T,TT,n,m,tot=,first[maxn],cur[maxn],in[maxn],d[maxn],q[],lows[maxm];
void insert(int u,int v,int w)
{
tot++;e[tot].v=v;e[tot].flow=w;e[tot].from=first[u];first[u]=tot;
tot++;e[tot].v=u;e[tot].flow=;e[tot].from=first[v];first[v]=tot;
}
bool bfs()
{
memset(d,-,sizeof(d));
int head=,tail=;q[]=S;d[S]=;
while(head!=tail)
{
int x=q[head++];if(head>)head=;
for(int i=first[x];i;i=e[i].from)
if(d[e[i].v]==-&&e[i].flow)
{
d[e[i].v]=d[x]+;
q[tail++]=e[i].v;
if(tail>)tail=;
}
}
return d[T]!=-;
}
int dfs(int x,int a)
{
if(x==T||a==)return a;
int flow=,f;
for(int& i=cur[x];i;i=e[i].from)
if(d[e[i].v]==d[x]+&&(f=dfs(e[i].v,min(a,e[i].flow)))>)
{
e[i].flow-=f;
e[i^].flow+=f;
a-=f;
flow+=f;
if(a==)break;
}
return flow;
}
int main()
{
scanf("%d",&TT);
while(TT--)
{
memset(first,,sizeof(first));
memset(in,,sizeof(in));
tot=;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d%d",&u,&v,&lows[i],&w);
in[u]-=lows[i];in[v]+=lows[i];
insert(u,v,w-lows[i]);
}
S=,T=n+;
for(int i=;i<=n;i++)
{
if(in[i]>)insert(S,i,in[i]);
if(in[i]<)insert(i,T,-in[i]);
}
while(bfs())
{
for(int i=;i<=n+;i++)cur[i]=first[i];
dfs(S,inf);
}
bool ok=;
for(int i=first[S];i;i=e[i].from)
if(e[i].flow)ok=;
if(ok)
{
printf("YES\n");
for(int i=;i<=m*;i+=)
printf("%d\n",e[i^].flow+lows[i>>]);
}
else printf("NO\n");
}
return ;
}

最新文章

  1. 循序渐进Python3(十一) --5-- 同源策略
  2. poj 2195 Going Home
  3. Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
  4. asp.net core 使用 StaticFiles 中间件 (不完整翻译)
  5. 20145207 《Java程序设计》第10周学习总结
  6. 常用自动化测试工具介绍(支持B/S、C/S)
  7. 淘宝API开发(三)
  8. viPlugin安装破解
  9. Jquery 获取checkbox的checked问题
  10. 生命周期-初识IOS
  11. fedora 安装pylab 并简单绘制三角函数
  12. 【翻译】CSS水平和垂直居中的12种方法
  13. Android监听自身卸载,弹出用户反馈调查
  14. jQuery 动态绑定插件livequery的用法
  15. Spring跟mybatis结合
  16. @Slf4j注解实现日志输出
  17. tkinter中frame布局控件
  18. VS2013安装和单元测试
  19. 安装elasticsearch-7.0.0及插件
  20. GBDT源码剖析

热门文章

  1. virtualbox 5.0.6 在debian jessie amd64启动报错
  2. 【Biocode】产生三行的seq+01序列
  3. 【BioCode】将多个蛋白质序列分成单个的txt文档
  4. 太平洋网络ip地址查询接口使用,返回json格式,默认返回jsonp
  5. 【bzoj2257】[Jsoi2009]瓶子和燃料 扩展裴蜀定理+STL-map
  6. BZOJ4719 NOIP2016天天爱跑步(线段树合并)
  7. [poi2011]bzoj 2277 —— strongbox&#183;[洛谷3518]
  8. 多线程在javaweb中的应用
  9. java学习1-环境搭建
  10. [COCI2011-2012#5] POPLOCAVANJE 后缀自动机