problemCode=2314">点击打开链接

题意:给定m条边和n个节点。每条边最少的流量和最多的流量。保证每一个节点的出入流量和相等,问能够形成吗,能够则输出每条边的流量

思路:一道有上下界的网络流,由于有下界。说明我们每条边必须跑大于等于下界的流量,那我们能够转化一下,将下界设为必要边,也就是我们肯定会跑的边,并且这道题是没有源点和汇点的,所以我们要加这两个点。而对于一条边。a,b,low,high,我们a->b连的流量为high-low,a->T为low。S->b为low。跑最大流。假设满流则方案成功。找边的流量输出就可以,我感觉它为什么正确呢,仅仅是自己感觉的由于这东西好像没法证明啊,我从源点出发,出发的每条边都是下界,这就满足了下界这个条件,而里面没有多加入边的网络也已经是上界减去下界的正常的网络了。这样我能从网络里将下界的流量传输到汇点,就能够说明网络的可行性。由于这样仅仅是调整了里面的网络的流量。并且里面的网络已经合法了,看着第二组例子画出来应该好理解一点.........说的自己都不是非常清楚.......ZOJ的题有输入组数T,我在VJ上做的没有,加上就能够了

#include <queue>
#include <vector>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=210;
struct edge{
int to,cap,rev;
edge(int a,int b,int c){to=a;cap=b;rev=c;}
};
vector<edge>G[maxn];
int level[maxn],iter[maxn];
void add_edge(int from,int to,int cap){
G[from].push_back(edge(to,cap,G[to].size()));
G[to].push_back(edge(from,0,G[from].size()-1));
}
void bfs(int s){
memset(level,-1,sizeof(level));
queue<int>que;level[s]=0;
que.push(s);
while(!que.empty()){
int v=que.front();que.pop();
for(unsigned int i=0;i<G[v].size();i++){
edge &e=G[v][i];
if(e.cap>0&&level[e.to]<0){
level[e.to]=level[v]+1;
que.push(e.to);
}
}
}
}
int dfs(int v,int t,int f){
if(v==t) return f;
for(int &i=iter[v];i<G[v].size();i++){
edge &e=G[v][i];
if(e.cap>0&&level[v]<level[e.to]){
int d=dfs(e.to,t,min(f,e.cap));
if(d>0){
e.cap-=d;
G[e.to][e.rev].cap+=d;
return d;
}
}
}
return 0;
}
int max_flow(int s,int t){
int flow=0;
while(1){
bfs(s);
if(level[t]<0) return flow;
memset(iter,0,sizeof(iter));
int f;
while((f=dfs(s,t,inf))>0) flow+=f;
}
}
int high[100010],num[100010][2];
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=-1){
for(int i=0;i<maxn;i++) G[i].clear();
int sum=0,a,b,c;
for(int i=0;i<m;i++){
scanf("%d%d%d%d",&a,&b,&c,&high[i]);
add_edge(a,b,high[i]-c);
num[i][0]=a;num[i][1]=G[a].size()-1;
add_edge(0,b,c);
add_edge(a,n+1,c);
sum+=c;
}
int ans=max_flow(0,n+1);
if(ans!=sum) printf("NO\n");
else{
printf("YES\n");
for(int i=0;i<m;i++){
printf("%d\n",high[i]-G[num[i][0]][num[i][1]].cap);
}
}
}
return 0;
}

ZOJ 2314 有上下界的网络流的更多相关文章

  1. ZOJ 2314 带上下界的可行流

    对于无源汇问题,方法有两种. 1 从边的角度来处理. 新建超级源汇, 对于每一条有下界的边,x->y, 建立有向边 超级源->y ,容量为x->y下界,建立有向边 x-> 超级 ...

  2. ZOJ 2314 Reactor Cooling 带上下界的网络流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题意: 给n个点,及m根pipe,每根pipe用来流躺液体的, ...

  3. ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)

    //有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...

  4. ZOJ 3229 有上下界最大流

    1: /** 2: ZOJ 3229 有上下界的最大流 3: 两次求最大流的过程,非二分 4: 有源汇上下界的最大流问题, 首先连接 sink -> src, [0,INF]. 5: 根据net ...

  5. SGU 194. Reactor Cooling(无源汇有上下界的网络流)

    时间限制:0.5s 空间限制:6M 题意: 显然就是求一个无源汇有上下界的网络流的可行流的问题 Solution: 没什么好说的,直接判定可行流,输出就好了 code /* 无汇源有上下界的网络流 * ...

  6. 【ZOJ2314】Reactor Cooling(有上下界的网络流)

    前言 话说有上下界的网络流好像全机房就我一个人会手动滑稽,当然这是不可能的 Solution 其实这道题目就是一道板子题,主要讲解一下怎么做无源无汇的上下界最大流: 算法步骤 1.将每条边转换成0~u ...

  7. poj_2396 有上下界的网络流

    题目大意 一个mxn的矩阵,给出矩阵中每一行的和sh[1,2...m]以及每一列的数字的和目sv[1,2...n],以及矩阵中的一些元素的范围限制,比如a[1][2] > 1, a[2][3] ...

  8. 【BZOJ2502】清理雪道 有上下界的网络流 最小流

    [BZOJ2502]清理雪道 Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降 ...

  9. 【2018沈阳赛区网络预选赛J题】Fantastic Graph 【有上下界的网络流】

    要补的题太多了导致最近没写博客(好吧是我懒) 题目链接https://nanti.jisuanke.com/t/31447 题意 给出一个二分图,问能否挑选出一些边,使得每个点的度数都在[L,R]这个 ...

随机推荐

  1. SYS.AUD$无法扩容导致无法登录的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/bisal/article/details/19068663 昨天同事说有个测试库无法登录了,用PLS ...

  2. java环境配置错误集锦

    eclipse生成的文件目录 D:\eeworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps 1.java. ...

  3. @private @protected @public

    @private  作用范围仅仅在自身类 @protected 作用范围在自身类及继承自己的子类(默认属性) @public 在系统中的不论什么地方都能够使用

  4. pythonUnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128

    今天做网页到了测试和数据库交互的地方,其中HTML和数据库都是设置成utf-8格式编码,插入到数据库中是正确的,但是当读取出来的时候就会出错,原因就是Python的str默认是ascii编码,和uni ...

  5. 【BestCoder】【Round#44】

    模拟+Trie+桶排(归并?)+容斥 A 模(shou)拟(su)题= =感觉好像见过? 计算得分什么的…… //BestCoder #44 A #include<vector> #inc ...

  6. GUI程序设计

    1. 对话框(JDialog)使用示例 例1. JDialog简单使用示例. import javax.swing.JLabel; public class demoJDialog { JFrame ...

  7. 【STL学习】堆相关算法详解与C++编程实现(Heap)

    转自:https://blog.csdn.net/xiajun07061225/article/details/8553808 堆简介   堆并不是STL的组件,但是经常充当着底层实现结构.比如优先级 ...

  8. iOS开发-UINavigationController简单介绍

    导航条或者说导航栏目现在在App中基本上也算是标配,类似于父子级别的味道在里面,UINavigationController就是负责简化这一实现功能的,属于iOS开发中比较常用的一种容器View co ...

  9. Cognos 报表在列表上面显示汇总

    一直以来,Cognos Report Studio设计报表的时候,汇总默认显示在列表下方: 1如图,拖一个列表 2运行如下,数据显示正常按日期排序 3选中订单笔数.订单金额,添加自动汇总 4:运行,可 ...

  10. Drupal 通过API动态的加入样式文件

    前面几篇文章中讲到关于样式的载入方式.已经了解到能够通过 theme.info 载入样式文件,但都须要更新缓存才干够使用.因些这样子没有办法动态的载入一些样式文件,在DP中提供了两个API操作样式文件 ...