HDU多校第六场 1001 Salty Fish —— 最小割模型 + 启发式合并

2023-11-02 10:38

本文主要是介绍HDU多校第六场 1001 Salty Fish —— 最小割模型 + 启发式合并,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:点我啊╭(╯^╰)╮

题目大意:

     n n n 个点根为 1 1 1 的树,每个点上有价值 a i a_i ai 的苹果
    树上有 m m m 个监控: x x x k k k c c c
    在点 x x x 有一个监控,可以检测到最短距离在 k k k 以内的所有子树上的点
    破坏该监控需要 c c c
    求最大收获

解题思路:

在这里插入图片描述
    说明一下几点:
    对于每个监控,其最优的贪心策略是接受最远点的流量
    每次合并将较短链上的儿子插入到长链
    长链上的每个点都被插入一次,时间复杂度: O ( n ) O(n) O(n)
    每条长链在链顶位置被插入一次,时间复杂度: O ( n ) O(n) O(n)

核心:最小割建模后,长链剖分优化合并

#include<bits/stdc++.h>
#define rint register int
#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';
#define fi first
#define se second
using namespace std;
typedef long long ll;
using pii = pair <int,ll>;
const int maxn = 3e5 + 5;
int T, n, m, f[maxn], a[maxn], dep[maxn];
vector <pii> cam[maxn];
map <int, ll> mp[maxn];void merge(auto &mp1, auto &mp2){if(mp1.size() < mp2.size())mp1.swap(mp2);for(auto t : mp2) mp1[t.fi] += t.se;
}int main() {scanf("%d", &T);while(T--){scanf("%d%d", &n, &m);for(int i=1; i<=n; i++) mp[i].clear(), cam[i].clear();for(int i=2, x; i<=n; i++){scanf("%d", &x);f[i] = x;dep[i] = dep[x] + 1;}ll ans = 0;for(int i=1; i<=n; i++) scanf("%d", a+i), ans += a[i];for(int i=1; i<=m; i++){int x, k, c;scanf("%d%d%d", &x, &k, &c);cam[x].push_back({k, c});}for(int i=n; i; i--){mp[i][-dep[i]] += a[i];for(auto &u : cam[i]){auto it = mp[i].lower_bound(-dep[i] - u.fi);while(it != mp[i].end()) {if(it->se <= u.se){ans -= it->se;u.se -= it->se;it = mp[i].erase(it);	//	下一个 } else {ans -= u.se;it->se -= u.se;u.se = 0;break;}}}if(f[i]) merge(mp[f[i]], mp[i]);}printf("%lld\n", ans);}
}

这篇关于HDU多校第六场 1001 Salty Fish —— 最小割模型 + 启发式合并的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330016

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c