题意: 给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流躺物质。

并且满足每根pipe一定的流量限制,范围为[Li,Ri].即要满足每时刻流进来的不能超过Ri(最大流问题),同时最小不能低于Li。

/*
无源汇的上下界可行流。
参见:周源《一种简易的方法求解流量有上下界的网络中网络流问题》。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define N 210
#define M 80010
#define inf 1000000000
using namespace std;
int head[N],dis[N],low[M],s[N],n,m,cnt,S,T;
struct node{int v,f,pre;}e[M];
queue<int> q;
void add(int u,int v,int f){
e[++cnt].v=v;e[cnt].f=f;e[cnt].pre=head[u];head[u]=cnt;
e[++cnt].v=u;e[cnt].f=;e[cnt].pre=head[v];head[v]=cnt;
}
bool bfs(){
memset(dis,-,sizeof(dis));
q.push(S);dis[S]=;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i;i=e[i].pre)
if(e[i].f&&dis[e[i].v]==-){
dis[e[i].v]=dis[u]+;
q.push(e[i].v);
}
}
return dis[T]!=-;
}
int dinic(int x,int f){
int rest=f;
if(x==T) return f;
for(int i=head[x];i;i=e[i].pre){
if(!e[i].f||dis[e[i].v]!=dis[x]+) continue;
int t=dinic(e[i].v,min(rest,e[i].f));
if(!t) dis[e[i].v]=-;
e[i].f-=t;e[i^].f+=t;rest-=t;
}
if(rest==f) dis[x]=-;
return f-rest;
}
int main(){
int Q;scanf("%d",&Q);
while(Q--){
memset(head,,sizeof(head));
memset(s,,sizeof(s));
int sum=;cnt=;
scanf("%d%d",&n,&m);S=;T=n+;
for(int i=;i<=m;i++){
int u,v,minn,maxn;
scanf("%d%d%d%d",&u,&v,&minn,&maxn);
low[i]=minn;s[u]+=minn;s[v]-=minn;
add(u,v,maxn-minn);
}
for(int i=;i<=n;i++)
if(s[i]>) add(i,T,s[i]),sum+=s[i];
else if(s[i]<) add(S,i,-s[i]);
int maxflow=;
while(bfs())
maxflow+=dinic(S,inf);
if(maxflow!=sum) printf("NO\n");
else {
printf("YES\n");
for(int i=;i<=m;i++)
printf("%d\n",low[i]+e[(i<<)^].f);
}
}
return ;
}

最新文章

  1. egret调用页面js的方法。
  2. 我要成为前端工程师!给 JavaScript 新手的建议与学习资源整理
  3. sql 的实用函数(包含日期函数、截取字符串函数)
  4. error C2144: 语法错误:&ldquo;int&rdquo;的前面应有&ldquo;;&rdquo;
  5. JS中函数声明与函数表达式的不同
  6. jquery循环操作
  7. C# System.Timers.Timer的一些小问题?
  8. Encapsulation、Inheritance、Polymorphism
  9. jmeter beanshell内容
  10. html5代码,获取地理位置
  11. CSS+JS实现兼容性很好的无限级下拉菜单
  12. JavaScript操作数组
  13. Android的Ui层次
  14. Git Learning2 GitHub upload
  15. 基于Eureka的服务治理
  16. FuelPHP 系列(五) ------ Security 防御
  17. Vue中父子组件执行的先后顺序
  18. HTML第十章总结
  19. android -------- Data Binding的使用 ( 四 )ListView
  20. getHibernateTemplate().save(t)执行不成功,数据不能插入到数据库

热门文章

  1. iOS 闭包传值 和 代理传值
  2. 高级字符驱动之堵塞与非堵塞IO
  3. 快速搭建lvs + keepalived + nginx
  4. centos7安装mongodb3.6
  5. 致敬wusir懒孩子自有懒孩子的生存之道之二
  6. HDU4616 树形DP+三次深搜
  7. windows下pip安装python模块时报错【转】
  8. vue时时监听input输入框中 输入内容 写法
  9. Android学习笔记之-----讯飞语音识别实例化RecognizerDialog参数出现错误的解决方法
  10. 项目管理者必知:适用于仪表盘项目的7个优秀JavaScript库