969. 志愿者招募(网络流,费用流,无源汇上下界可行流)#困难,想不到

活动 - AcWing

申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管。

布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者。

经过估算,这个项目需要 N 天才能完成,其中第 i 天至少需要 Ai 个人。

布布通过了解得知,一共有 M 类志愿者可以招募。

其中第 i 类可以从第 Si 天工作到第 Ti 天,招募费用是每人 Ci 元。

新官上任三把火,为了出色地完成自己的工作,布布希望用尽量少的费用招募足够的志愿者,但这并不是他的特长!

于是布布找到了你,希望你帮他设计一种最优的招募方案。

数据保证一定有解。

输入格式

第一行包含两个整数 N,M,表示完成项目的天数和可以招募的志愿者的种类。

接下来的一行中包含 N 个非负整数,表示每天至少需要的志愿者人数。

接下来的 M 行中每行包含三个整数 Si,Ti,Ci,含义如上文所述。

为了方便起见,我们可以认为每类志愿者的数量都是无限多的。

输出格式

包含一个整数,表示你所设计的最优方案的总费用。

数据范围

30%30% 的数据中,1≤N,M≤10,1≤Ai≤10
100%100% 的数据中,1≤N≤1000,1≤M≤10000
数据保证题目中其他所涉及的数据以及答案均不超过 2^31−1。

输入样例:
3 3
2 3 4
1 2 2
2 3 5
3 3 2
输出样例:
14
样例解释

招募 3 名第一类志愿者和 4 名第三类志愿者。

解析: 

本题有一个 n 天的项目,每天至少需要 ai 个人,一共有 m 类打工人,每类人能从第 si 天工作到第 ti 天,且需要 ci 的费用,现在要求我们设计一个合理的方案让费用最小。

我们可以用一条边来表示一天,用 1 到 2 的边表示第 1 天需要的人数,用 2 到 3 的边表示第 2 天需要的人数,以此类推。

由于每天是至少需要 ai 个人,是可以大于 ai 的,相当于每条边都有一个下界的限制,并且本题还要求费用,因此本题是一个无源汇上下界可行费用流问题。

然后我们考虑如何在图中把志愿者表示出来,假设现在有一个志愿者可以从第 2 天工作到第 3 天,相当于可以从第 2 天连续流过两条边,第 4 天开始该志愿者就不能继续工作了,对于流网络来说相当于从点 4 开始这段流量就消失了,但是我们要保证整个流网络是流量守恒的,所以我们可以从点 4 向点 2 连一条边,让点 2 到点 4 之间形成一个循环,保证该支援者在第 3 天工作完之后将流量回流,保证流量守恒。通过这样的思路我们就可以表示所有类型的志愿者,并且每个志愿者对应的回流的那条边的流量就是该类志愿者的人数,因此这些回流边的容量就是 +∞,费用是该类志愿者的费用。

通过以上分析,我们就能构建出一个无源汇有上下界的流网络 G,很容易可以证明流网络中任意一个可行流和原问题的任意一个可行方案都是一一对应的,并且两者的费用也是一一对应的,可以自行证明。

综上所述,我们要想求原问题的最小费用,只需要求流网络中的无源汇上下界最小费用可行流,这里需要参考 无源汇上下界可行流问题 的解法来做。然后我们就能根据 G 构建出 G′,并且 G 中任意一个可行流和 G′ 中任意一个满流都是一一对应的。我们要求 G 中可行流的费用最小值,对应的要求 G′ 中满流的费用最小值,即 G′ 中的最小费用最大流。

注意: 并不是所有的费用流都可以和上下界可行流关联起来,因为本题中所有费用是没有下界的,所以对于原图的任何一个可行流 f,通过以上的对应方式对应到满流 f′,由于 f
 和 f′ 中有费用的边都是一样的,因此这两个流虽然不一样,但是费用是一样的,所以才可以关联起来。

作者:小小_88
链接:https://www.acwing.com/solution/content/137773/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 无源汇上下界可行流证明:2188. 无源汇上下界可行流 (最大流,上下界可行流,模板题)-CSDN博客

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
#include<unordered_set>
#include<bitset>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int N = 1e3+10, M = (1e4+2e3) * 2 + 10, INF = 0x3f3f3f3f;
int n, m, S, T;
int h[N], e[M], f[M], w[M], ne[M], idx;
int q[N], d[N], pre[N], incf[N];
bool st[N];void add(int a, int b, int c,int d) {e[idx] = b, f[idx] = c, w[idx] = d, ne[idx] = h[a], h[a] = idx++;e[idx] = a, f[idx] = 0, w[idx] = -d, ne[idx] = h[b], h[b] = idx++;
}bool spfa() {int hh = 0, tt = 1;memset(d, 0x3f, sizeof d);memset(incf, 0, sizeof incf);q[0] = S, d[S] = 0, incf[S] = INF;while (hh != tt) {int t = q[hh++];if (hh == N)hh = 0;st[t] = 0;for (int i = h[t]; i != -1; i = ne[i]) {int j = e[i];if (d[j] > d[t] + w[i] && f[i]) {d[j] = d[t] + w[i];pre[j] = i;incf[j] = min(incf[t], f[i]);if (!st[j]) {st[j] = 1;q[tt++] = j;if (tt == N)tt = 0;}}}}return incf[T] > 0;
}int EK() {int cost = 0;while (spfa()) {int t = incf[T];cost += t * d[T];for (int i = T; i != S; i = e[pre[i] ^ 1]) {f[pre[i]] -= t;f[pre[i] ^ 1] += t;}}return cost;
}int main() {cin >> n >> m;S = 0, T = n + 2;memset(h, -1, sizeof h);int last = 0;for (int i = 1,a,b,c; i <= n; i++) {scanf("%d", &a);if (last > a)add(S, i, last - a, 0);else if (last < a)add(i, T, a - last, 0);add(i, i + 1, INF, 0);last = a;}add(S, n + 1, last, 0);for (int i = 1,a,b,c; i <= m; i++) {scanf("%d%d%d", &a, &b, &c);add(b + 1, a, INF, c);}printf("%d\n", EK());return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络算法——反向传播 Back Propagation

文章目录 前言 1、反向传播的本质 &#xff08;1&#xff09;前向传播&#xff08;Forward Propagation&#xff09; &#xff08;2&#xff09;反向传播&#xff08;Back Propagation&#xff09; 2、反向传播的原理 &#xff08;1&#xff09;链式法则&#xff08;Chain Rule…

GB 2312字符集:中文编码的基石

title: GB 2312字符集&#xff1a;中文编码的基石 date: 2024/3/7 19:26:00 updated: 2024/3/7 19:26:00 tags: GB2312编码中文字符集双字节编码区位码规则兼容性问题存储空间优化文档处理应用 一、GB 2312字符集的背景 GB 2312字符集是中国国家标准委员会于1980年发布的一种…

低代码测试自动化

每个企业都希望将产品快速推向市场。虽然低代码无代码测试自动化可以帮助组织实现这一目标&#xff0c;但测试人员必须牢记几件事&#xff0c;才能通过低代码无代码来推进他们的组织。 低代码测试自动化的重要性是什么&#xff1f; 低代码测试自动化加速了测试生命周期。借助简…

成都正信:亲戚借了钱一直不还怎么委婉的说

在中国传统文化中&#xff0c;亲情关系往往被视为最为重要和敏感的部分。当亲戚间发生借贷时&#xff0c;若出现拖欠不还的情形&#xff0c;处理起来尤为棘手。面对这样的尴尬局面&#xff0c;采取委婉而有效的沟通方式至关重要。 张华最近就遇到了这样的困扰。他的表弟去年因急…

【Python刷题】环形链表

问题描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

Extend继承

继承的作用 当我们定义了一个Person类&#xff1a; class Person{private Stirng name;private int age;public String getName(){....}public int getAge(){...}public void setName(String name){...}public void setAge(int age){...} }现在&#xff0c;假设还需要定义一个…

多目标粒子群(MOPSO)算法原理及其MATLAB实现

粒子群算法(PSO)是Eberhart和Kennedy于1995年提出的一种模拟鸟类觅食行为的算法[1]&#xff0c;具有操作简单、速度快等特点。但在实际应用中&#xff0c;许多决策问题都是多目标优化问题&#xff0c;采用粒子群算法来处理多目标优化问题是一种有效方法&#xff0c;Coello 等人…

URL输入到页面渲染过程详解

当我们在浏览器中输入一个URL并按下回车键时&#xff0c;浏览器会执行一系列步骤来解析URL、发送请求、接收响应&#xff0c;并最终渲染页面。这个过程涉及到多个阶段&#xff0c;包括DNS解析、TCP握手、发送HTTP请求、服务器处理请求、返回HTTP响应、浏览器解析和渲染等。下面…

面视题之——ThreadLocal作用

面视题之——ThreadLocal作用&#xff08;学习中&#xff0c;欢迎纠正&#xff09; 概念 ThreadLocal 是Java中的一个类&#xff0c;它提供了线程局部变量。这些变量与普通变量的区别在于&#xff0c;每个访问该变量的线程都有一个独立的副本&#xff0c;互不干扰。 每一个线…

《Java架构巨头面对全球用户:超大规模系统架构师面试宝典》

随着科技的迅猛发展&#xff0c;Java架构师在构建全球用户服务的大规模系统中扮演着举足轻重的角色。招聘一位卓越的Java架构师&#xff0c;不仅需要深厚的技术功底&#xff0c;更需要面对全球用户和超大规模系统的独特经验。为助您招聘到理想的人才&#xff0c;以下是一份超实…

Jmeter高效组织接口自动化用例

1、善用“逻辑控制器”中的“简单控制器”。可以把简单控制器像文件夹一样使用&#xff0c;通过它来对用例进行分类归档&#xff0c;方便后续用例的调试和执行。 2、同编写测试用例一样&#xff0c;这里的接口测试用例应该进行唯一性编号&#xff0c;这样在运行整个用例计划出现…

批处理(Batch Processing)概念

批处理&#xff08;Batch Processing&#xff09;这一概念在不同上下文中可有不同的含义&#xff1a; 传统操作系统层面&#xff1a; 在早期的操作系统中&#xff0c;批处理是指一种处理模式&#xff0c;用户将一系列作业&#xff08;job&#xff09;按照一定的顺序组织起来&am…

Python算法100例-3.8 黑洞数

1.问题描述2.问题分析3.算法设计4.比较三个数的大小并将其重组5.寻找“黑洞数”6.完整的程序 1&#xff0e;问题描述 编程求三位数中的“黑洞数”。 黑洞数又称陷阱数&#xff0c;是指任何一个数字不全相同的整数&#xff0c;在经过有限次“重排求差”操作后&#xff0c;总会…

【Yarn】error Command failed. Exit code: 1

报错代码 success Installed "create-vue3.9.2" with binaries:- create-vue C:\Program 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 error Command failed. Exit code: 1 Command: C:\Program Files\nodejs\node_global\bin\create-vuelate…

【语法】C++学习

注意 使用devc对vector初始化使用vector v1 {1, 2, 3, 4, 5}; 报错 解决 在编译器选项中加入以下代码 -static-libgcc -stdc11

Vue3搭建后台管理系统模板

1、搭建后台管理系统模板 1.1项目初始化 从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范…

wince+gprs拨号上网总结

一、硬件连接 本次调试的GPRS模块引脚定义 三星主板全功能扩展串口2引脚定义 因GPRS模块可以和pc机直连进行数据通讯&#xff0c;那么收发肯定内部交叉&#xff0c;故主板和GPRS的连接也采用直连方式。如果接线不对则出现没有回应现象&#xff0c;拨号时出现端口不可用&#xf…

反向代理多级多机

一 架构图 本次实验需要 5台机器 第一台 nginx 只做代理服务器 负责反向代理 加 负载均衡 后面的两台nginx 做真实服务器 处理静态资源 再后面的 tomcat 做真实服务器 处理动态资源 二 具体实验 &#xff08;一&#xff09; 具体实验环境 所有机器关闭防火墙 安装…

⁴ 在CSDN最火爆的AI话题是这些

CSDN当前AI最热点的文章生成方面的话题是自然语言处理&#xff08;NLP&#xff09;领域中的预训练语言模型&#xff0c;特别是GPT-3模型。 GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;是由OpenAI开发的一种基于Transformer架构的大规模预训练语言模型。…