961. 最大获利(网络流,最小割,最大权闭合图)

活动 - AcWing

新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战。

THU 集团旗下的 CS&T 通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研究、站址勘测、最优化等项目。

在前期市场调查和站址勘测之后,公司得到了一共 N 个可以作为通讯信号中转站的地址,而由于这些地址的地理位置差异,在不同的地方建造通讯中转站需 要投入的成本也是不一样的,所幸在前期调查之后这些都是已知数据:

建立第 i 个通讯中转站需要的成本为 Pi(1≤i≤N)。

另外公司调查得出了所有期望中的用户群,一共 M 个。

关于第 i 个用户群的信息概括为 Ai,Bi 和 Ci:这些用户会使用中转站 Ai 和中转站 Bi 进行通讯,公司可以获益 Ci。(1≤i≤M,1≤Ai,Bi≤N)

THU 集团的 CS&T 公司可以有选择的建立一些中转站(投入成本),为一些用户提供服务并获得收益(获益之和)。

那么如何选择最终建立的中转站才能让公司的净获利最大呢?(净获利 = 获益之和 – 投入成本之和)

输入格式

第一行有两个正整数 N 和 M。

第二行中有 N 个整数描述每一个通讯中转站的建立成本,依次为 P1,P2,…,PN 。

以下 M 行,第 (i+2) 行的三个数 Ai,Bi 和 Ci 描述第 i 个用户群的信息。

所有变量的含义可以参见题目描述。

输出格式

输出一个整数,表示公司可以得到的最大净获利。

数据范围

1≤N≤5000,
1≤M≤50000,
0≤Ci,Pi≤100

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

选择建立 1、2、31、2、3 号中转站,则需要投入成本 66,获利为 1010,因此得到最大收益 44。

解析: 

 

有若干个中转站,建立每个中转站都需要花费对应的成本。我们还有若干个用户群,每个用户群连接两个中转站,我们要向满足某个用户群的需求,就必须建立对应的两个中转站,因此我们可以从用户群向对应的两个中转站分别连一条有向边,表示如果想满足这个用户群的需求就必须要两个中转站建立起来。而满足每个用户群的需求都能获得对应的收益。

本题要求最大获利,获利就是总收益减去总成本。可以发现成本都是要减去的,收益都是要增加的。因此如果将所有中转站和用户群看作节点,那么所有中转站的权值就是负的,所有用户群的权值就是正的,选取任何一个用户群,都要算上对应的两个中转站,即从该用户群出发能到的所有点都需要选上,因此在选点的时候其实就是在选闭合点集,而我们的目标是使选的所有点的权值和最大,其实就是让我们求整张图的最大权闭合子图。

因此本题只需要按照求最大权闭合子图的步骤去求即可,首先是建图,从源点向所有正权点连边,容量就是权值;从所有负权点向汇点连边,容量就是权值的绝对值;所有用户群向需要建造的中转站连边,容量是 +∞
 

 最大权闭合图相关概念(作者:小小_88 ):最大权闭合子图的基本概念 - AcWing

#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 = 55e3 + 5, M = (5e4*3 + 5e3) * 2 + 10, INF = 0x3f3f3f3f;
int n, m, S, T;
int h[N], e[M], f[M], ne[M], idx;
int q[N], d[N], cur[N];void add(int a, int b, int c) {e[idx] = b, f[idx] = c, ne[idx] = h[a], h[a] = idx++;e[idx] = a, f[idx] = 0, ne[idx] = h[b], h[b] = idx++;
}bool bfs() {int hh = 0, tt = 0;memset(d, -1, sizeof d);q[0] = S, d[S] = 0, cur[S] = h[S];while (hh <= tt) {int t = q[hh++];for (int i = h[t]; i != -1; i = ne[i]) {int j = e[i];if (d[j] == -1 && f[i]) {d[j] = d[t] + 1;cur[j] = h[j];if (j == T)return 1;q[++tt] = j;}}}return 0;
}int find(int u, int limit) {if (u == T)return limit;int flow = 0;for (int i = cur[u]; i != -1 && flow < limit; i = ne[i]) {int j = e[i];cur[u] = i;if (d[j] == d[u] + 1 && f[i]) {int t = find(j, min(f[i], limit - flow));if (!t)d[j] = -1;f[i] -= t, f[i ^ 1] += t, flow += t;}}return flow;
}int dinic() {int ret = 0, flow;while (bfs())while (flow = find(S, INF))ret += flow;return ret;
}int main() {cin >> n >> m;memset(h, -1, sizeof h);S = 0, T = n + m + 1;for (int i = 1,a; i <= n; i++) {scanf("%d", &a);add(i + m, T, a);}int tot = 0;for (int i = 1,a,b,c; i <= m; i++) {scanf("%d%d%d", &a, &b, &c);add(S, i, c);add(i, a + m, INF);add(i, b + m, INF);tot += c;}printf("%d\n", tot - dinic());return 0;
}

 

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

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

相关文章

linux centos7.9改dns和ip

vi /etc/sysconfig/network-scripts/ifcfg-ens32 &#xff1a;wq后 重启网络服务 systemctl restart network —————————————————————————— 篇外话题 软件下载 xshell可以从腾讯软件中心下载

基于Rust语言,和WebAssembly技术,与JavaScript结合,的具体应用场景

基于Rust语言与WebAssembly&#xff08;Wasm&#xff09;技术并与JavaScript结合&#xff0c;可以应用于多个场景&#xff0c;特别是在需要高性能和/或低级系统访问的情况下。下面是一些具体的应用场景&#xff1a; 性能密集型任务: Rust加上Wasm适合执行计算密集型任务&#x…

笔记电商人工智能客服

天猫-店小蜜 标准模式 全自动接待&#xff1a;机器接待。若答不出&#xff0c;转人工引导语&#xff0c;顾客手动转人工。 智能辅助接待&#xff1a;机器人将辅助客服接待&#xff0c;在客服接待过程中提供话术推荐&#xff0c;并自动回复客服尚未接起的买家咨询。 混合接待…

在达梦DM8数据库的运行日志中出现大量 Failure occurs in data_recv_inet_once 警告信息

【问题描述】&#xff1a; 在 DM 达梦数据库的运行日志中出现大量 Failure occurs in data_recv_inet_once 警告信息&#xff0c;如下图&#xff1a; [WARNING] database P0000005986 T0000000000000022168 Failure occurs in data_recv_inet_once, code(13) len(32576, 0) [W…

使用 C++23 协程实现第一个 co_yield 同步风格调用接口--Qt计算排列组合

上一篇介绍了 co_await 的例子。与 co_await 类似&#xff0c;在C23的协程特性里&#xff0c; co_yield 用于从协程执行过程中暂停&#xff0c;并返回值。这个功能乍一听起来很奇怪&#xff0c;网上的例子大多是用一个计数器来演示多次中断协程函数&#xff0c;返回顺序的计数值…

【MySQL】DCL

DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 1. 管理用户 在MySQL数据库中&#xff0c;DCL&#xff08;数据控制语言&#xff09;是用来管理用户和权限的语句集合。通过DCL语句&#xff0c;可以创建、修改、删…

机器遗忘同等重要,AI如何忘记不良数据,保护用户隐私?

引言&#xff1a;大语言模型中的机器遗忘问题 在人工智能领域&#xff0c;大语言模型&#xff08;LLMs&#xff09;因其在文本生成、摘要、问答等任务中展现出的卓越能力而备受关注。然而&#xff0c;这些模型在训练过程中可能会记住大量数据&#xff0c;包括敏感或不当的信息…

数据分析(二):学生成绩预测分析报告

目录 摘要 一、引言 二、 数据源介绍 三、 数据清洗和预处理 3.1 缺失值处理 3.2 异常值处理 3.3 数据编码 四、 探索性数据分析 4.1 可视化相关统计量 4.2 目标数据的分布情况 4.3 Pearson 相关性分析 五、 特征工程 5.1 特征构造 5.1.1 总饮酒量 5.1.2 整体关…

使用空闲电脑免费搭建一个私人的网盘

如果你也有一台空闲电脑&#xff0c;可以使用它来搭建一个私人的网盘。 这里使用的是飞梦云网盘&#xff1b; 服务端&#xff1a;下载 服务器文件使用hash校验进行储存&#xff0c;实现重复上传的文件秒传功能。 Fuse4Ui&#xff08;虚拟分区工具&#xff09;&#xff1a;下…

GaN建模:强大但富有挑战性

来源&#xff1a;Modeling GaN: Powerful but Challenging&#xff08;10年&#xff09; 文章的研究内容 这篇文章主要研究了氮化镓&#xff08;GaN&#xff09;高电子迁移率晶体管&#xff08;HEMTs&#xff09;的建模问题。GaN HEMTs是微波频段高功率发射器设计中的关键技术…

java面试题基础篇,kafka与rabbitmq面试题

1. Java 堆空间 **发生频率&#xff1a;**5颗星 造成原因 无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用&#xff0c;对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用&a…

C语言操作符优先顺序

以下是 C 语言中各种运算符的优先级&#xff0c;按照优先级从高到低的顺序列出&#xff1a; () : 圆括号&#xff0c;函数调用&#xff0c;强制类型转换[] : 数组下标-> : 结构体和共用体成员通过指针访问. : 结构体和共用体成员访问 -- : 自增、自减 - : 正、负号! ~ : 逻…

K8S常见的持久化(存储)方案用法详解

文章目录 1、k8s持久化存储&#xff1a;emptyDir 临时存储方案2、k8s持久化存储&#xff1a;hostPath3、k8s持久化存储&#xff1a;nfs1、搭建nfs服务2.创建Pod&#xff0c;挂载NFS共享出来的目录3.请求pod&#xff0c;看结果 4、k8s持久化存储&#xff1a; PVC4.1.1 k8s PV是什…

BOOT电路

本质&#xff1a;BOOT电路本质上是单片机的引脚 作用&#xff1a;BOOT电路的作用是用于确定单片机的启动模式 使用方法&#xff1a;在单片机上电或者复位时给BOOT管脚设置为指定电平即可将单片机设置为指定启动模式。 原理&#xff1a;单片机上电或复位后会先启动内部晶振&a…

【C++进阶】哈希 + unordered系列容器

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

华为 OD 一面算法原题

2.2 亿彩票公布调查结果 昨天&#xff0c;闹得沸沸扬扬的《10 万中 2.2 亿》的彩票事件&#xff0c;迎来了官方公告。 简单来说&#xff0c;调查结果就是&#xff1a;一切正常&#xff0c;合规合法。 关于福利彩票事件&#xff0c;之前的推文我们已经分析过。 甚至在后面出现《…

IP地址(YACS)

题目描述 IP地址是一个长度固定为 3232 位 的 01 序列&#xff0c;给定一个IP地址&#xff0c;请将它转成点分十进制后输出。 点分十进制的转化方法如下&#xff1a;首先将IP地址分割成长度相等的四个二进制数字&#xff08;每个二进制数字的长度为 88&#xff09;&#xff0…

鸿运(通天星CMSV6车载)主动安全监控云平台敏感信息泄露漏洞

文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 鸿运主动安全监控云平台实现对计算资源、存储资源、网络资源、云应用服务进行7*24小时全时区、多地域、全方位、立体式、智能化的IT运维监控&#xff0c;保障IT系统安全、稳定、可靠运行…

unity初学问题:如何修改图片的坐标

如图&#xff0c;我们想要修改图片的轴心点坐标&#xff08;Pivot&#xff09; 选择图片组 打开编辑器在里面修改即可&#xff08;最下面的Custom Pivot&#xff09;

golang使用gorm操作mysql1

1.mysql连接配置 package daoimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger" )var DB *gorm.DB// 连接数据库&#xff0c;启动服务的时候&#xff0c;init方法就会执行 func init() {username : "roo…