2023牛客暑期多校训练营6-A Tree
2023牛客暑期多校训练营6-A Tree
https://ac.nowcoder.com/acm/contest/57360/A
文章目录
- 2023牛客暑期多校训练营6-A Tree
- 题意
- 解题思路
- 代码
题意

解题思路
最大价值和这个数据范围,一眼 d p dp dp。
直接在树上并不好处理,问题是如何有效转化、处理 x , y x,y x,y之间的最短路径上的最大边权值。这里用到了 k r u s k a l 重构树 kruskal重构树 kruskal重构树, k r u s k a l 算法 kruskal算法 kruskal算法是一种贪心地求最小生成树的算法,本题所用算法参照了该算法的思路,将一张无向图的边按边权排序,一次取用,不同的是,我们将每条边转化为带有点权的虚点,任意两点由虚点连接,而原图上的点均为叶子结点,如图:

一条边的两个端点将祖先连在一起,可以用并查集实现。
根据这种树的特殊性质,其虚点的权值自上而下减少,原图上两个点之间的最短路径上的最大权值即为该图上两点最近公共祖先的点权。此时可以进行树形 d p dp dp了!

设 d p x , b dp_{x,b} dpx,b表示以 x x x为根的字数内黑点个数为 b b b的贡献最大值,对于原图上任意边,其贡献值为
( W 1 × B 2 + W 2 × B 1 ) × k (W_1\times B_2+W_2\times B_1)\times k (W1×B2+W2×B1)×k,推理得:
d p x , b = M a x b − s z r ≤ b 1 ≤ m i n ( b , s z l ) ( d p l , b 1 + d p r , b − b 1 + k x × ( b 1 ( 左子树黑点个数 ) × ( s z r − b + b 1 ) ( 右子树白点个数 ) + ( s z l − b 1 ) ( 左子树白点个数 ) × ( b − b 1 ) ( 右子树黑点个数 ) ) ) dp_{x,b}=Max_{b-sz_r\le b_1\le min(b,sz_l)}(dp_{l,b_1}+dp_{r,b-b_1}+\\ k_x\times(b_1(左子树黑点个数)\times(sz_r-b+b_1)(右子树白点个数)+\\ (sz_l-b_1)(左子树白点个数)\times(b-b_1)(右子树黑点个数))) dpx,b=Maxb−szr≤b1≤min(b,szl)(dpl,b1+dpr,b−b1+kx×(b1(左子树黑点个数)×(szr−b+b1)(右子树白点个数)+(szl−b1)(左子树白点个数)×(b−b1)(右子树黑点个数)))
对于叶子结点 l e a f leaf leaf:
d p l e a f , a [ l e a f ] ⊕ 1 = − c o s t l e a f d p l e a f , a [ l e a f ] = 0 dp_{leaf,a[leaf]\oplus 1}=-cost_{leaf}\\ dp_{leaf,a[leaf]}=0 dpleaf,a[leaf]⊕1=−costleafdpleaf,a[leaf]=0
注意内存与结果大小, d p dp dp数组可以用 v e c t o r < l o n g l o n g > vector<long long> vector<longlong>。
代码
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
const int N=6005;
int n,a[N],c[N],f[N],m,sz[N],b[N];
pair<int,int>e[N];
struct node{int u,v,w;
}p[N];
vector<ll> dp[N];
bool cmp(node a,node b){return a.w<b.w;
}
int sf(int x){if(f[x]==x)return x;return f[x]=sf(f[x]);
}
void dfs(int u){if(u<=n){dp[u][a[u]^1]=-c[u];dp[u][a[u]]=0;sz[u]=1;return;}int l=e[u].first,r=e[u].second;dfs(l),dfs(r);sz[u]=sz[l]+sz[r];dp[u]=vector<ll>(sz[u]+1,-0x3f3f3f3f3f3f);if(sz[l]>sz[r])swap(l,r);for(int x=0;x<=sz[u];x++)for(int i=max(0,x-sz[r]);i<=min(sz[l],x);i++){dp[u][x]=max(dp[u][x],dp[l][i]+dp[r][x-i]+b[u]*(i*(sz[r]-x+i)+(sz[l]-i)*(x-i)));}
}
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i],dp[i].resize(2);for(int i=1;i<=2*n;i++)f[i]=i;for(int i=1;i<=n;i++)cin>>c[i];for(int i=1;i<n;i++){int u,v,w;cin>>u>>v>>w;p[i].u=u,p[i].v=v,p[i].w=w;}sort(p+1,p+n,cmp);m=n;for(int i=1;i<n;i++){int u=p[i].u,v=p[i].v,w=p[i].w;if(sf(u)==sf(v))continue;++m;b[m]=w;e[m].first=sf(u),e[m].second=sf(v);f[sf(u)]=f[sf(v)]=m;}dfs(sf(1));ll ans=0;for(int i=0;i<=n;i++){ans=max(ans,dp[sf(1)][i]);}cout<<ans;
}
相关文章:
2023牛客暑期多校训练营6-A Tree
2023牛客暑期多校训练营6-A Tree https://ac.nowcoder.com/acm/contest/57360/A 文章目录 2023牛客暑期多校训练营6-A Tree题意解题思路代码 题意 解题思路 最大价值和这个数据范围,一眼 d p dp dp。 直接在树上并不好处理,问题是如何有效转化、处理…...
Vc - Qt - QPainter::SmoothPixmapTransform及QPainter::Antialiasing
QPainter::SmoothPixmapTransform是一个标志,用于指定绘制操作中的平滑像素变换行为。当使用QPainter绘制一幅图像时,设置SmoothPixmapTransform标志可以使图像变换过程更加平滑,减少锯齿状边缘的出现。此标志通常用于绘制缩放后图像的情况。…...
【练习】条件变量:创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC
题目: 创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC......要求使用条件变量 #include <stdio.h> #include <pthread.h> #include <unistd.h>//创建互斥锁 pthread_mutex_t mutex PTHREAD_MUTE…...
SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)
初衷 💢初衷💢 因为一遍遍修改并重启项目觉得很麻烦,所以刚开始就自己给项目配置了热加载,但奈何代码更新还是慢,还不如我重启一遍项目的速度,所以放弃了自己上网找到的热加载配置。直到我debugger前端代码…...
clear_data_code_2d_model
dev update off () dev close window () ImageFiles:-./二维条码/read_image(Image,ImageFiles 十二维条码原图.png)dev_open_window_fit_image(Image,0,0,-,-1,WindowHandle)set_display_font (WindowHan…...
“深入剖析JVM:揭秘Java虚拟机的工作原理“
标题:深入剖析JVM:揭秘Java虚拟机的工作原理 摘要:本文将深入探讨Java虚拟机(JVM)的工作原理,包括JVM的架构、内存管理、垃圾回收、即时编译等关键技术。通过对JVM的剖析,我们可以更好地理解Ja…...
elementui表格table中实现内容的换行
问题 elementui 中的 table 行内的内容不能进行换行。 解决方法 思路: 利用 作用域插槽 结合 v-html,通过作用域插槽传递内容到表格行内,再通过 v-html 进行内容的替换。 代码: <el-table:data"tableData"stri…...
java 框架
目录 Spring 如何解决 bean 的循环依赖?什么是 AOP?Spring 如何实现的?BeanFactory 和 ApplicationContext 有什么区别?介绍一下 Spring bean 的生命周期Spring 的隔离级别Spring 框架用到了哪些设计模式?并举出典型例子Spring 如何解决 bean 的循环依赖? Spring中引入三…...
死锁的发生原因和怎么避免
项目场景: 提示:这里简述项目相关背景: 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大) 问题描述 死锁,简单来说就是两个或者两个以上的线程在…...
visual studio 生成dll文件以及修改输出dll文件名称操作
目录 visual studio 生成dll文件以及修改dll文件名称一、准备测试代码二、设置导出dll属性三、生成dll文件 .lib .dll .pdb 的简单介绍dll文件使用方式lib文件使用方式1、动态链接 (原理)2、静态链接: visual studio 生成dll文件以及修改dll文…...
【Leetcode】73.矩阵置零
一、题目 1、题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例1: 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例2: 输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1…...
zabbix监控mysql容器主从同步状态并告警钉钉/企业微信
前言:被监控的主机已经安装和配置mysql主从同步,和zabbix-agent插件。 mysql创建主从同步:http://t.csdn.cn/P4MYq centos安装zabbix-agent2:http://t.csdn.cn/fx74i mysql主从同步,主要监控这2个参数指标…...
ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC
文章目录 ARM64 DC 与 IC 指令 上篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍 ARM64 DC 与 IC 指令 AArch64指令集中有两条关于缓存维护(cache maintenance)的指令,分别是IC和DC。 IC 是用于指令缓存操作&…...
落地数字化管理,提升企业市场竞争力
数字化企业管理方案是一种利用数字技术和信息系统来提升企业管理效率和运营效果的策略。 潜在的数字化企业管理方案 1、企业资源规划(ERP)系统:建立一个集成的ERP系统来统一管理企业的各项业务流程,包括采购、销售、库存管理、财…...
2023华数杯数学建模竞赛C题思路解析
如下为:2023华数杯数学建模竞赛C题 母亲身心健康对婴儿成长的影响 的思路解析 C题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护,还为婴儿提供情感支持和安全感。母亲心理健康状态的不…...
Photon之如何解决Photon Server无法在局域网使用的bug
前言 先介绍一下Photon的两个服务器服务: Photon Cloud 是一个完全托管的软件即服务 (SaaS) 解决方案。我们可以完全专注于应用程序客户端,而托管、服务器操作和扩展均由光子官方负责。 Photon Server 是一个本地服务器应用程序,我们可以在本地或指定的计算机上运行和托管。…...
Redis两种持久化方案RDB持久化和AOF持久化
Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启…...
银河麒麟v10 vnc环境配置
方法一、启用自带远程桌面 银河麒麟默认已经自带远程桌面,如下图。此时即可用Realvnc Viewer访问该终端,仔细查看后自带的远程桌面是开源组件gnome-remote-desktopGNOME / gnome-remote-desktop GitLabhttps://gitlab.gnome.org/GNOME/gnome-remote-de…...
【动态内存管理助力程序优化与性能飞升】
本章重点 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 几个经典的笔试题 柔性数组 1. 为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈…...
电动汽车设计、制造、研发的学科、技术和前沿科技综述
引言:电动汽车作为替代传统燃油汽车的一种先进交通工具,不仅具有环保、低噪音等优势,而且对于能源消耗和气候变化等全球性问题也具有重要意义。本文将综述与电动汽车设计、制造、研发相关的学科、技术和前沿科技,以期对电动汽车领…...
Python FastAPI 高并发项目结构
Python FastAPI 高并发项目结构解析 在当今高并发的互联网应用中,选择高效的框架和合理的项目结构至关重要。Python的FastAPI凭借其异步支持、高性能和简洁的语法,成为构建高并发服务的理想选择。仅靠框架本身无法充分发挥其潜力,合理的项目…...
别再死磕代码了!用Matlab Stateflow给汽车控制器画个“决策大脑”(2021b版保姆级教程)
用Stateflow为汽车控制器构建可视化决策逻辑:2021b实战指南 在汽车电子开发领域,工程师们常常需要处理复杂的控制逻辑和状态转换。传统的手写C代码方式虽然灵活,但随着系统复杂度提升,维护和调试成本呈指数级增长。想象一下&#…...
效率神器!命令行终端优化(Zsh, iTerm2)
效率神器!命令行终端优化(Zsh, iTerm2) 对于开发者和技术爱好者来说,命令行终端是日常工作中不可或缺的工具。默认的终端配置往往功能有限,操作效率低下。通过优化终端环境,比如使用Zsh和iTerm2࿰…...
ComfyUI面部修复FaceDetailer参数调优实战
1. FaceDetailer核心参数解析与实战调优 第一次接触ComfyUI的FaceDetailer时,我被它密密麻麻的参数面板吓了一跳。但经过三个月的实际项目打磨,我发现只要掌握几个关键参数,就能让面部修复效果立竿见影。先来看最影响效果的四个核心参数&…...
ESP8266轻量级Homie物联网框架封装库
1. 项目概述 simple-homie-iot-rc433 是一个面向 ESP8266 平台(亦可适配 ESP32)的轻量级 Homie 物联网框架封装库,其核心定位并非从零实现 Homie 协议栈,而是对 homie-iot/esp 官方库进行工程化抽象与使用模式简化。它不引入新…...
Python 3.12 Special Attribute - 08 - __module__
Python 3.12 Special Attribute - __module____module__ 是 Python 中一个重要的内置特殊属性,它存储了定义 类、函数、方法 的模块名称(字符串)。这个属性在序列化(如 pickle)、动态导入、调试以及框架设计中扮演着…...
从Excel到HTML:RAG分块策略在结构化数据召回中的革新实践
1. 为什么Excel数据需要特殊的分块策略? 在企业级应用中,Excel表格是最常见的数据载体之一。财务报告、销售数据、库存清单等结构化信息通常都以.xlsx格式存储和流转。但当我们尝试将这些数据接入RAG(检索增强生成)系统时…...
别再被P0127吓到了!手把手教你读懂汽车仪表盘上的DTC故障码(附ISO15031-6标准解读)
汽车故障码解密指南:从P0127到U0105的实战解读 当仪表盘突然亮起黄色发动机灯,伴随着一串像是外星密码的字母数字组合时,大多数车主的第一反应都是心头一紧。上周我的老伙计张伟就遇到了这种情况——他的SUV在高速公路上突然显示"P0172&…...
算法安全自评估报告怎么写?内容框架 + 难点解析 + 实战模板(直接照搬)
本文适合:算法工程师、合规专员、产品负责人、备案申报人员,全文干货无废话,可直接用于项目申报、内部评审、算法备案材料。一、前言随着《算法推荐管理规定》《生成式人工智能服务管理暂行办法》等政策落地,算法安全自评估报告已…...
Spring Boot 缓存注解的实现原理
Spring Boot缓存注解的实现原理 在现代Web应用中,缓存是提升系统性能的重要手段之一。Spring Boot通过简洁的注解方式,为开发者提供了便捷的缓存功能,其底层实现原理既高效又灵活。本文将深入探讨Spring Boot缓存注解的核心机制,…...
