有源汇上下界最大流

有源汇有上下界最大流详解(loj116) 例题链接 首先吐槽一下放题人(我不知道是不是我理解错了什么。) 题目描述里就一个上下界然后就说要求最大流。。。 直接建上界然后跑最大流不就完了么?? 结果上网看了看题解发现还要满足可行流(题目描述是真的皮) 不知道是不是我理解的问题。没学过无源汇有上下界可行流的看这里 可行流我不刚学完么。。想了想。。 上一题是无源汇的,而这道题是有源汇的。 那么我只要将他变成循环流就可以了嘛(其实就 阅读详情

更好的阅读体验:这里

传送门:这里

分析

这是一道有源汇上下界最大流的模板题(废话)。

既然是网络流的问题,故应该先将图建出来:

根据题目特征,

  • 我们将少女和每一天看作是图中的点。

  • 当然,因为每一天都有拍照次数的限制,我们可以加一个源点 s s s ,向每一天连边,这个边的容量范围是 [ 0 , D i ] [0,D_i] [0,Di​] 。

  • 类似地,因为每个少女都有一个至少拍照张数的限定,所以加一个汇点 t t t ,然后让每个少女向汇点连边,容量范围自然是 [ G i , ∞ ] [G_i,∞] [Gi​,∞] 。

  • 至于少女和每一天,根据题意,她们之间连边的容量是 [ L , R ] [L, R] [L,R] 。

至此,我们便将图建好了,从图的特征以及题意可以看出,这是一个求有源汇上下界最大流的问题。

怎么解决呢?

如果对约定的记号不熟悉可以看看我的博客:
这里

无源汇上下界可行流

首先,先介绍一下无源汇上下界可行流的求法(即:可行循环流的求法):

p.s. 如果会的可以直接跳过看下面的部分

对于可行循环流中的边 ( u , v ) (u,v) (u,v) 有如下容量限制: c ‾ ( u , v ) ≤ f ( u , v ) ≤ c ‾ ( u , v ) \underline{c}(u,v)\le f(u,v) \le \overline{c}(u,v) c​(u,v)≤f(u,v)≤c(u,v)

简单的想法是将问题转化为求有源汇最大流。转化的方法自然是构造,构造的原则是保证问题的等价。

构造方式:

加入虚拟源点 S S S ,虚拟汇点 T T T 。

对于每个点 x x x,记它的入边(假设入点为 u u u )对应的容量下界为 c ‾ ( u , x ) \underline{c}(u,x) c​(u,x) ,出边 (假设出点为 v v v )对应的容量下界为 c ‾ ( x , v ) \underline{c}(x,v) c​(x,v) 。

如果 c = ∑ c ‾ ( u , x ) − ∑ c ‾ ( x , v ) > 0 c=\sum \underline{c}(u,x)-\sum \underline{c}(x,v)>0 c=∑c​(u,x)−∑c​(x,v)>0 ,那么连边 ( S , x ) (S,x) (S,x) ,容量为 c c c 。

如果 c = ∑ c ‾ ( u , x ) − ∑ c ‾ ( x , v ) < 0 c=\sum \underline{c}(u,x)-\sum \underline{c}(x,v)<0 c=∑c​(u,x)−∑c​(x,v)<0 ,那么连边 ( x , T ) (x,T) (x,T) ,容量为 − c -c −c 。

根据上述规则得到新图 G ′ G' G′ 。

只需证明: G ′ G' G′ 的最大流与原图 G G G 的可行流是一一对应的。

证明一个流对应另一个流的方法:从一个流进行等价变换,所得到的新流仍然合法:即满足容量限制,流量守恒。

容量限制较容易证明,故本文出现的证明都是关于证明流量守恒的。

证明:

先证明 G G G 的一个可行流对应着 G ′ G' G′ 的一个最大流(这里的最大流要求源点、汇点与其它点的连边满流,在接下来的讨论中可以发现需要这个约束)。

约定:点 x x x 的入点构成的集合为 U U U ,出点构成的集合为 V V V ,这样做可以省去求和 ∑ \sum ∑ ,表述方便,即 ∑ c ‾ ( u , x ) = c ( U , x ) \sum \underline{c}(u,x)=c(U,x) ∑c​(u,x)=c(U,x)
, ∑ c ‾ ( x , v ) = c ( x , V ) \sum \underline{c}(x,v)=c(x,V) ∑c​(x,v)=c(x,V) 等等。

对 G G G 的一个可行流,自然有: f ( U , x ) = f ( x , V ) f(U,x)=f(x,V) f(U,x)=f(x,V)

等价变形: f ′ ( U , x ) + c ‾ ( U , x ) = f ′ ( x , V ) + c ‾ ( x , V ) f'(U,x)+\underline{c}(U,x)=f'(x,V)+\underline{c}(x,V) f′(U,x)+c​(U,x)=f′(x,V)+c​(x,V)

进而有: f ′ ( U , x ) + c ‾ ( U , x ) − c ‾ ( x , V ) = f ′ ( x , V ) f'(U,x)+\underline{c}(U,x)-\underline{c}(x,V)=f'(x,V) f′(U,x)+c​(U,x)−c​(x,V)=f′(x,V)

不妨设 c ‾ ( U , x ) − c ‾ ( x , V ) > 0 \underline{c}(U,x)-\underline{c}(x,V)>0 c​(U,x)−c​(x,V)>0 , 注意到 c ‾ ( U , x ) − c ‾ ( x , V ) \underline{c}(U,x)-\underline{c}(x,V) c​(U,x)−c​(x,V) 恰好是 c ( S , x ) c(S,x) c(S,x), c ‾ ( U , x ) − c ‾ ( x , V ) < 0 \underline{c}(U,x)-\underline{c}(x,V)<0 c​(U,x)−c​(x,V)<0 的情况同理,故对于新图,流量也是守恒的。

而且从中可以发现,这里的最大流要求源点、汇点与其它点的连边满流。

从上面的证明可以发现 G ′ G' G′ 的一个最大流也对应着 G G G 的一个可行流,只需要将公式倒着写一遍即可(因为是恒等变换)。

至此,证明结束。

在具体操作的时候,要注意跑完最大流之后,对应的边需要加上补偿值才是所要求的网络(参见证明中的公式以及下面的代码)。

求取可行循环流具体过程可以见代码:

#include<bits/stdc++.h>
using namespace std;

const int N=205, M=12005+N<<1;
const int INF=0x3f3f3f3f;

int n, m, S, T;
struct node{
    int to, c, l, next;
}e[M];
int h[N], tot;

void add(int u, int v, int lc, int uc){
    e[tot].to=v, e[tot].c=uc-lc, e[tot].l=lc, e[tot].next=h[u], h[u]=tot++;
    e[tot].to=u, e[tot].c=0, e[tot].next=h[v], h[v]=tot++;
}

int imo[N]; // in minus out

int d[N], q[N], cur[N];

bool bfs(){
    memset(d, -1, sizeof d);
    int tt=-1, hh=0;
    q[++tt]=S, d[S]=0, cur[S]=h[S];
    while(tt>=hh){
        int hd=q[hh++];
        for(int i=h[hd]; ~i; i=e[i].next){
            int go=e[i].to;
            if(d[go]==-1 && e[i].c){
                cur[go]=h[go];
                d[go]=d[hd]+1;
                if(go==T) return true;
                q[++tt]=go;
            }
        }
    }
    return false;
}

int find(int u, int limit){
    if(u==T) return limit;
    int flow=0;
    for(int i=cur[u]; ~i && limit>flow; i=e[i].next){
        int go=e[i].to;
        cur[u]=i;
        if(e[i].c && d[go]==d[u]+1){
            int t=find(go, min(limit-flow, e[i].c));
            if(!t) d[go]=-1;
            flow+=t, e[i].c-=t, e[i^1].c+=t;
        }
    }
    return flow;
}

int dinic(){
    int res=0, flow;
    while(bfs()) while(flow=find(S, INF)) res+=flow;
    return res; 
}

int main(){
    memset(h, -1, sizeof h);
    cin>>n>>m;
    S=0, T=n+1;
    for(int i=1; i<=m; i++){
        int u, v, lc, uc; cin>>u>>v>>lc>>uc;
        add(u, v, lc, uc);
        imo[u]-=lc, imo[v]+=lc;
    }   

    int tot=0;
    for(int i=1; i<=n; i++)
        if(imo[i]>0) add(S, i, 0, imo[i]), tot+=imo[i];
        else if(imo[i]<0) add(i, T, 0, -imo[i]);

    if(dinic()!=tot) puts("NO");
    else{
        puts("YES");
        for(int i=0; i<2*m; i+=2) cout<<e[i].l+e[i^1].c<<endl;
    }
    return 0;
}

接下来求有源汇上下界最大流:

在上面,我们已经知道了怎样求无源汇上下界可行流,那先看看有源汇上下界可行流怎么求:方法其实很简单,将汇点 t t t 向源点 s s s 连一条容量 ∞ ∞ ∞ 的边(我们称之为虚边)即可,有个直观的比喻:就像是在汇点 t t t 连接一台水泵,将源点 s s s 流往 汇点 t t t 的水重新泵上去。这样做就将问题转换为了熟悉的无源汇上下界可行流问题。

简单来说:

t t t 向源点 s s s 连一条容量 ∞ ∞ ∞ 的边,得到循环流。

从虚拟源点 S S S 向 T T T 跑一遍最大流。

记录 t t t 向 s s s 连的边的流量(即虚边流量 r e s 1 res_1 res1​ ),然后断开虚边,从 s s s 向 t t t 跑一遍最大流得到新增的流量 r e s 2 res_2 res2​ ,答案就是 r e s 1 + r e s 2 res_1+res_2 res1​+res2​ 。

注意到,无源汇上下界可行流对应的流网络与虚拟源汇点 S , T S,T S,T 相连的边都是满流,所以在跑完一遍最大流之后,与虚拟源汇点 S , T S,T S,T 相连的边都不可能再被用到,我们可以直接将它们全部拆掉,然后,再将虚边(水泵)拆掉,发现只需要加回补偿值(但事实上,因为 t t t 向 s s s 连的边容量范围是 [ 0 , ∞ ) [0,∞) [0,∞) ,不需要进行补偿),所得到的流就是一个合法的有源汇上下界可行流了。

也就是说新图的可行流和原图(没有经过变换的,最原始的)的可行流是一一对应的,那么新图的最大流也必然是对应着原图的最大流了。

因此,最后我们从 s s s 向 t t t 跑一遍最大流即可。

代码:

#include<bits/stdc++.h>
using namespace std;

const int N=1550, M=365+1000+365*1000+N<<1, INF=0x3f3f3f3f; 

int n, m, s, t, S, T;
struct node{
	int to, c, next;
}e[M];
int h[N], tot;

// 连边函数,有这样的性质:正向边^1=反向边
void add(int u, int v, int c){
	e[tot].to=v, e[tot].c=c, e[tot].next=h[u], h[u]=tot++;
	e[tot].to=u, e[tot].c=0, e[tot].next=h[v], h[v]=tot++;
}

int imo[N]; // imo 的意思是: in minus out 入减去出

int q[N], d[N], cur[N];
bool bfs(){
	memset(d, -1, sizeof d);
	int tt=-1, hh=0;
	q[++tt]=S, d[S]=0, cur[S]=h[S];
	while(tt>=hh){
		int hd=q[hh++];
		for(int i=h[hd]; ~i; i=e[i].next){
			int go=e[i].to;
			if(d[go]==-1 && e[i].c){
				d[go]=d[hd]+1;
				cur[go]=h[go];
				if(go==T) return true;
				q[++tt]=go;
			}
		}
	}
	return false;
}

int find(int u, int limit){
	if(u==T) return limit;
	int flow=0;
	for(int i=cur[u]; ~i && limit>flow; i=e[i].next){
		int go=e[i].to;
		cur[u]=i; // 当前弧优化
		if(d[go]==d[u]+1 && e[i].c){
			int t=find(go, min(e[i].c, limit-flow));
			if(!t) d[go]=-1;
			e[i].c-=t, e[i^1].c+=t, flow+=t;
		}
	}
	return flow;
}

int dinic(){
	int res=0, flow;
	while(bfs()) while(flow=find(S, INF)) res+=flow;
	return res;
}

int main(){
	while(cin>>n>>m){
		memset(h, -1, sizeof h), tot=0;
		memset(imo, 0, sizeof imo);
		
		s=0, t=n+m+1, S=n+m+2, T=S+1;
		for(int i=1; i<=m; i++){
			int G; cin>>G;
			add(i, t, INF-G);
			imo[i]-=G, imo[t]+=G;
		}
		
		for(int i=m+1; i<=m+n; i++){
			int C, D; cin>>C>>D;
			add(s, i, D); // 范围是 [0,D] 因此不需要更新 imo[]
			while(C--){
				int id, lc, uc; cin>>id>>lc>>uc;
				id++;
				add(i, id, uc-lc);
				imo[i]-=lc, imo[id]+=lc;
			}
		}
		
		int cnt=0;
		for(int i=0; i<=n+m+1; i++)
			if(imo[i]>0) add(S, i, imo[i]), cnt+=imo[i];
			else if(imo[i]<0) add(i, T, -imo[i]);
		
		add(t, s, INF); // 添加“水泵”
		
		if(dinic()!=cnt) cout<<-1<<endl<<endl;
		else{
			int res=e[tot-1].c;
			e[tot-1].c=0, e[tot-2].c=0;
			S=s, T=t;
			res+=dinic();
			cout<<res<<endl<<endl;
		}
	}
	return 0;
}
有源汇的上下界可行流 有上下界的流问题 问题模型: 给定一个加权的有向图,满足: (,,,)GVEBC=(1)容量限制条件:(,)(,)(,)buvfuvcuv≤≤(2)流量平衡条件: (,) (,)(,)(,) uwwvE fuwfwv∈= ∑ ∑ (2)中的,即除了源汇外,所有点都满足流量平衡条件,则称G为有源汇网络;{,}wVst∈−否则,即不存在源汇,所有点都满足流量平衡条件,则称G为无源汇网络 立即下载

相关推荐

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

2189. 有源汇上下界最大流(最大流,上下界可行流,模板题)

给定一个包含 n 个点 m 条边的图,每条边都有一个流量下界和流量上界。给定源点 S 和汇点 T,求源点到汇点的最大流。

Landing_on_Mars的博客 643

【硬核指南/MI50 32G/Ubuntu】从零部署大模型:MI50显卡Ubuntu系统驱动安装与避坑全记录

本文详细记录了在Ubuntu系统上为AMD MI50显卡安装驱动并部署大模型的完整流程,包括硬件兼容性检查、BIOS关键设置、系统安装优化、ROCm驱动安装及常见问题解决方案。特别针对MI50显卡在X99平台上的特殊配置需求提供了实用技巧,帮助用户避免常见陷阱,提升大模型训练效率。

weixin_42520909的博客 807

有/无源汇-有上下界可行流/最大流/最小流,思路分析,算法实现,详细代码

最大流问题难在建模,所以要理解算法本质

EQUINOX1的博客 2594

【社区分享】从零开始学习 TinyML,建立 TensorFlow 深度学习模型(技术优化篇)

本文来自社区投稿与征集,作者王玉成,ML&IoT Google Developers Expert,温州大学智能锁具研究院总工程师。 了解更多:https://blog.youkuaiyun.com/wfing 经过前面几章的讨论,我们了解了TinyML 的概念,完成了一个最简单的TinyML 的模型并且运行在微控制器上,得出最基本的结果。但是在实际的工程应用中,模型建立之后,也需要再进一步结合许多优化方面的技术,这就是我们接下来想要探讨的。 5. 优化 TinyML 这本书也详细的向我...

tensorflowforum的博客 1万+

一个代码循环计算水在石墨烯表面的接触角

石墨烯接触角

Rockyoung 2579

有源汇的上下界最大流

关于有源汇的上下界最大流 主要由两种做法 1、二分一个流量,然后跑一个最大流,看有没有能满足的可行流,能满足的流量的最大值就是答案了,复杂度(单次网络流复杂度*log最大流量) 反之我是不想写这个的,感觉写起很麻烦,而且二分的边界也不好调; 看方法二就可以了; 2、首先无论如何我们都需要先跑一次可行流的(不然连能不能流通都不知道) 然后我...

weixin_30433075的博客 256

使用 Simulink + Simscape Electrical 对锂电池储能系统的充放电管理策略进行建模与仿真

摘要:本文详细介绍了基于Simulink的锂电池储能系统充放电管理策略建模与仿真方法。重点阐述了系统结构设计、建模过程(包括锂电池模型、充放电控制器、热管理系统等模块搭建)以及仿真设置。通过分析荷电状态管理、温度控制和功率限制等核心要素,展示了如何实现安全高效的充放电策略。仿真结果可验证系统性能,为优化管理策略提供依据。该方法为新能源存储和智能电网应用提供了实用的仿真分析工具。

amy_mhd的博客 159

洛谷P14579 【模板】有源汇上下界最大流

洛谷P14579 【模板】有源汇上下界最大流

2503_92296128的博客 469

Android Framework SurfaceFlinger面试题及参考答案

请简述 SurfaceFlinger 在 Android 系统中的作用。 SurfaceFlinger 是 Android 系统中一个非常关键的服务。它主要负责将多个应用程序的 Surface 合成到一个屏幕显示内容中。 从应用程序的角度来看,每个应用都有自己的 UI 界面,这些 UI 界面实际上是由一系列的图层(Surface)构成。例如,一个应用可能有背景图层、按钮图层、文本图层等。应用通过向 SurfaceFlinger 提供这些 Surface 来请求显示。 SurfaceFl

大模型大数据攻城狮的专栏 1186

YOLOv11 改进入门篇 | 轻量级涨点技巧:GhostConv 替代普通卷积的实战指南

摘要: 本文介绍如何通过GhostConv改进YOLOv11,实现轻量化涨点。YOLOv11深度增加导致参数量、延迟和内存占用上升,GhostConv通过“本征特征+线性变换”策略,在精度几乎无损的情况下降低30%-50%计算量。文章详细解析GhostConv原理,对比普通卷积的参数量和FLOPs优势,并提供完整的代码级改造流程,包括模块实现、注册及网络配置。实验表明,该方法有效提升边缘端推理效率,适用于移动端等资源受限场景。

shrgegrb的博客 1656

LOJ - #116. 有源汇有上下界最大流(有源汇有上下界的最大流)

题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的有向图,每条边都有一个流量限制 [ lower , upper ],给定源点 s 和汇点 t ,求出源点到汇点的最大流 题目分析:参考博客:https://zybuluo.com/xiaoziyao/note/1694812 无源汇上下界可行流: 统计每个点的入度 in[ x] 和出度 out[ x],即连向 x 的流量之和与连出 x 的流量之和 对于每条原来的边,流量设置为 upper - lower 设置虚拟源点 st 和虚拟..

Falcon的博客 624

YOLOv12改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制

这篇文章带来一个经典注意力模块的汇总,虽然有些模块已经发布很久了,但后续的注意力模块也都是在此基础之上进行改进的,对于初学者来说还是有必要去学习了解一下,以加深对模块,模型的理解。

Limiiiing的博客 1511

上下界网络流-无源汇可行流与有源汇最大流

上下界网络流 2021.9.3 无源汇上下界可行流 之前的最大流讨论一般为有源无下届情况,那么无源汇有上下界可行流应如何求解? 首先要做的是消除下边界,应如何做?在有下届情形下,流网络中的任意一条边的可行流应满足fmin(u,v)≤c(u,v)≤fmax(u,v)fmin(u, v) \le c(u, v) \le fmax(u, v)fmin(u,v)≤c(u,v)≤fmax(u,v),由此可变换公式得0≤c(u,v)−fmin(u,v)≤fmax(u,v)−fmin(u,v)0 \le c(u, v)

Tinberlake的博客 422

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

有源汇有上下界最大流 模板

//有源汇有上下界最大流 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=2005,maxm=100005; const int inf=0x7f7f7f7f; struct edge{ int to,next,w,num...

失踪人口的年更日常 181

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【LOJ116】有源汇有上下界最大流(模板题)

点此看题面 大致题意: 给你每条边的流量上下界,让你先判断是否存在可行流。若存在,则输出最大流。 无源汇上下界可行流 在做此题之前,最好先去看看这道题目:【LOJ115】无源汇有上下界可行流。 大致思路 首先,我们先跑一遍无源汇上下界可行流,同时判断是否有解。 等会儿,这题是有源汇的,而刚才提到的可行流是无源汇的,怎么办? 答:没关系! 直接从汇点向源点连一条下界为\(0\)、上界为\(INF\)...

weixin_30782293的博客 191

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【ACWing】2189. 有源汇上下界最大流

题目地址: https://www.acwing.com/problem/content/2191/ 给定一个包含nnn个点mmm条边的有向图,每条边都有一个流量下界和流量上界。给定源点SSS和汇点TTT,求源点到汇点的最大流。 输入格式: 第一行包含四个整数n,m,S,Tn,m,S,Tn,m,S,T。接下来mmm行,每行包含四个整数a,b,c,da,b,c,da,b,c,d表示点aaa和bbb之间存在一条有向边,该边的流量下界为ccc,流量上界为ddd。点编号从111到nnn。 输出格式: 输出一个整数表

数学、算法爱好者的博客 315

Shoot the Bullet|东方文花帖,洛谷 P5192,有源汇上下界最大流

正题 板子 有源汇上下界最大流可以通过跑完有源汇上下界可行流后,跑一遍从源到汇的最大流求解. 有源汇上下界可行流可以通过加一条从汇到源的无穷容量边,转化成无源汇上下界可行流来求解. 无源汇上下界可行流可以通过强行先假设下界已经流满,建立超级源汇,若一个点入度>出度,那么就从超级源向该店连一条容量为入度-出度的边,若一个点出度>入度,那么就从该点向超级汇连一条容量为出度-入度的边,判断是否有满足S割集只有超级源来求解. 注意最后...

Deep_Kevin的娱乐空间 292

LOJ116 - 有源汇有上下界最大流

原题链接 Description 模板题啦~ Code //有源汇有上下界最大流 #include <cstdio> #include <cstring> #include <algorithm> using namespace ...

ayw1069的博客 108

有源汇有上下界最大流/最小流 配题(HDU 3157)

给出解决有源汇有上下界最大流/最小流问题的具体建图步骤,以及算法步骤,并配有例题,以及代码。

猫ER 698

洛谷 - P5192 Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流(有源汇有上下界的最大流)

题目链接:点击查看 题目大意:一共有 n 天,每天可以拍最多 D[ i ] 张照片,每天可以选择 C[ i ] 个少女进行拍照,每个少女的编号为 T[ i ][ j ] ,每个少女需要拍摄照片的区间为 [ L[ i ][ j ] , R[ i ][ j ] ] ,最后每个少女的照片至少需要拍 G[ i ] 张,问满足上述情况下,最多能拍多少张照片 题目分析:题目有点难读,虽然是中文题面,但提到的变量实在是太多了。。 读懂题后稍微建一下图发现是一个有源汇有上下界的最大流问题,套一下模板就好了,建图方式如

Falcon的博客 512

网络流板子1【无源汇上下界可行流】【有源汇上下界最大流】【有源汇上下界最小流】

无源汇上下界可行流 题意 给定一个包含 n 个点 m 条边的有向图,每条边都有一个流量下界和流量上界。 求一种可行方案使得在所有点满足流量平衡条件的前提下,所有边满足流量限制。 代码 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 210, M = (10200 + N) * 2, INF = 1e8; int n, m, S

谁是凶手1703 386

【luogu P5192】Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流(网络流)

有 m 个人,每个人有一个总需求值。 然后有 n 天,每天有一些指定的人可以给予需求,每个人可以给定的量是一个区间中的任意一个数,然后限制你每天给的所有人的总量不能超过一个给出的值。 然后问你最多能给多少,如果不能满足要求则输出 -1。

欢迎您的光顾awa 585
上一篇: windows10 修改用户名
下一篇: 【概率论】随机变量
Tenshi0x0
博客等级 码龄7年 6粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值