Reactor Cooling

time limit per test: 0.5 sec.

memory limit per test: 65536 KB
input: standard

output: standard
The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nuclear reactor to produce plutonium for the nuclear bomb they are planning to create. Being the wicked computer genius of this group, you are responsible for developing
the cooling system for the reactor. 



The cooling system of the reactor consists of the number of pipes that special cooling liquid flows by. Pipes are connected at special points, called nodes, each pipe has the starting node and the end point. The liquid must flow by the pipe from its start point
to its end point and not in the opposite direction. 



Let the nodes be numbered from 1 to N. The cooling system must be designed so that the liquid is circulating by the pipes and the amount of the liquid coming to each node (in the unit of time) is equal to the amount of liquid leaving the node. That is, if we
designate the amount of liquid going by the pipe from i-th node to j-th as fij, (put fij = 0 if there is no pipe from node i to node j), for each i the following condition must hold: 





sum(j=1..N, fij) = sum(j=1..N, fji)

Each pipe has some finite capacity, therefore for each i and j connected by the pipe must be fij ≤ cij where cij is the capacity of the pipe. To provide sufficient cooling, the amount of the liquid flowing by the pipe going
from i-th to j-th nodes must be at least lij, thus it must be fij ≥ lij



Given cij and lij for all pipes, find the amount fij, satisfying the conditions specified above. 



Input


The first line of the input file contains the number N (1 ≤ N ≤ 200) - the number of nodes and and M — the number of pipes. The following M lines contain four integer number each - i, j, lij and cij each. There is at most one pipe connecting
any two nodes and 0 ≤ lij ≤ cij ≤ 105 for all pipes. No pipe connects a node to itself. If there is a pipe from i-th node to j-th, there is no pipe from j-th node to i-th. 


Output


On the first line of the output file print YES if there is the way to carry out reactor cooling and NO if there is none. In the first case M integers must follow, k-th number being the amount of liquid flowing by the k-th pipe. Pipes are numbered as they are
given in the input file. 


Sample test(s)


Input

Test #1 4 6 1 2 1 2 2 3 1 2 3 4 1 2 4 1 1 2 1 3 1 2 4 2 1 2 Test #2 4 6 1 2 1 3 2 3 1 3 3 4 1 3 4 1 1 3 1 3 1 3 4 2 1 3 
Output

Test #1 



NO 



Test #2 



YES 









1

1

周源的论文 

url=hFKPly4PzyfwfQJx4jVnR-xzaGfuBZ-gF4Las1qIe0Sg21NMblE7qFvXMcvbrkhTEv_-UoZIeX6lYNbh1FXfMcHKX_RcQXinjlM-5jticxu">一种简易的方法求解流量有上下界的网络中网络流问题

直接套路之

#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset> using namespace std; #define PB push_back
#define MP make_pair
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,l,h) for(int i=(l);i<=(h);++i)
#define DWN(i,h,l) for(int i=(h);i>=(l);--i)
#define CLR(vis,pos) memset(vis,pos,sizeof(vis))
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LINF 1000000000000000000LL
#define eps 1e-8 typedef long long ll; const int mm=1000005;
const int mn=22222; int n,m;
int node,s,t,edge,max_flow; int ver[mm],flow[mm],next[mm]; int head[mn],work[mn],dis[mn],q[mn]; int vis[mn]; inline void init(int _node,int _s,int _t)
{
node=_node, s=_s, t=_t;
for(int i=0;i<node;++i)
head[i]=-1;
edge=max_flow=0;
} inline 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++]=s ] = 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==t) return 1;
}
}
return 0;
} int Dinic_dfs(int u,int exp)
{
if(u==t) return exp;
for(int &i=work[u],v,temp; i>=0 ;i=next[i])
{
if(flow[i] && dis[ v=ver[i] ]==dis[u]+1 && ( temp=Dinic_dfs(v,min(exp,flow[i])) )>0)
{
flow[i]-=temp;
flow[i^1]+=temp;
return temp;
}
}
return 0;
} int Dinic_flow()
{
int res,i;
while(Dinic_bfs())
{
for(i=0;i<node;++i) work[i]=head[i];
while( ( res=Dinic_dfs(s,INF) ) ) max_flow+=res;
}
return max_flow;
} int w[mn],l[mn]; int main()
{
int n,m;
while(cin>>n>>m){
CLR(w,0);
init(n+2,0,n+1);
int u,v,c;
REP(i,m){
scanf("%d%d%d%d",&u,&v,&l[i],&c);
addedge(u,v,c-l[i]);
w[u]-=l[i];
w[v]+=l[i];
}
int sum=0;
FOR(i,1,n){
if(w[i]>0){
addedge(s,i,w[i]);
sum+=w[i];
}
if(w[i]<0)
addedge(i,t,-w[i]);
}
int ans=Dinic_flow();
if(ans!=sum)
printf("NO\n");
else{
printf("YES\n");
REP(i,m)
printf("%d\n",flow[2*i+1]+l[i]);
}
}
return 0;
}

最新文章

  1. XIV Open Cup named after E.V. Pankratiev. GP of SPb
  2. 如何安装NodeJS到阿里云Centos (64位版本V5-7)
  3. P1038 神经网络
  4. 学习练习 java 集合
  5. -_-#【CSS 优化】
  6. phpstorm 解决svn 无法提交的问题
  7. 标量类型(scalar)
  8. 小猪的Android入门之路 day 1
  9. ILRuntime_NewbieGuide—导读
  10. bak
  11. POJ 2289 Jamie&#39;s Contact Groups 【二分】+【多重匹配】(模板题)
  12. 把一张图片变成base64
  13. 使用 PLSQL 连接 Oracle9i 数据库
  14. sql 查询重复行数据
  15. Webserver管理系列:6、网络和共享中心的安全配置
  16. vue中使用echarts来绘制世界地图和中国地图
  17. Mongodb 分享(一)
  18. Vue-router中的导航钩子
  19. X、Y轴抖动的动画
  20. OSG 坑爹的Android example

热门文章

  1. cf891a Pride
  2. 三、harbor部署之SSL
  3. 【LeetCode】Jewels and Stones(宝石与石头)
  4. WPF之DataAnnotations 注解说明
  5. TOJ 4095: love168yk的选美大赛
  6. USACO Hamming Codes
  7. BZOJ 3850: ZCC Loves Codefires【贪心】
  8. 【图论】bnuoj 52810 Splitting the Empire
  9. pageContext,request,session,application生命周期
  10. 集合-LinkList