树上的巧克力-树形DP

news/2025/11/11 10:14:21/文章来源:https://www.cnblogs.com/jiu-wei-lwj/p/19209240

树上的巧克力-树形DP

原题

题意

在树上选取两条不重叠的链,使得链上的权值和最大。

思路

很容易想到和树的直径有关,但是我们有两条链,这怎么办?

我们先观察它和直径的关系,发现画出来的图无非是一条直径和一条去掉直径后的直径(和第一条直径连起来也是剩下的直径)。

pZ9bFQU.md.png

所以,我们先求出直径,然后在每个直径上的点求出去掉直径后的直径。(去掉直径就是不能走这条直径),简单算一下时间复杂度,发现在 \(O(n^2)\) 的外表下藏着 \(O(n)\) 的心,可行。

然后就可以快乐度过水样例,发现 \(wa\) 在了第 \(3\) 个点。

仔细考虑一下我们的思路和代码实现,再加上 \(cf\) 大善人送的第 \(3\) 个样例,发现我们的少了两条链都不是直径的情况,这是什么玩意,不是偏离了我们的思路吗?但细细思考会发现,依旧有直径的身影。

pZ9bQSK.md.png

至于求出这样新的两边,我们可以记录直径上每个节点先连且不走直径的最大链。最后最一遍前缀和即可。

实在想不到的话可以用 \(dp\) 把每种状态记录,但是我浪费的时间已经很多了,就不详细展开。

code

#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int maxn = 1e5+10;vector<int> gra[maxn];
int n,wi[maxn],di[maxn],c;
int pre[maxn],zj[maxn];// 记录直径节点
bool vis[maxn];int line[maxn];// 节点出去的最大链
int pre_sum[maxn],ma_pre[maxn];
int suf_sum[maxn],ma_suf[maxn];void dfs(int u,int p,int op=1)// 能记录前驱的dfs
{if(op==2){pre[u]=p;}for(int v : gra[u]){if(v==p || vis[v]) continue;di[v]=di[u]+wi[v];if(di[v]>di[c]){c=v;}dfs(v,u,op);}
}signed main()
{#ifndef ONLINE_JUDGEfreopen("cjdl.in","r",stdin);freopen("cjdl.out","w",stdout);#endif // ONLINE_JUDGEscanf("%lld",&n);for(int i=1;i<=n;++i){scanf("%lld",wi+i);}for(int i=1,x,y ;i<n;++i){scanf("%lld%lld",&x,&y);gra[x].emplace_back(y);gra[y].emplace_back(x);}int ans1=0,ans2=0;di[1]=wi[1];// 求一遍直径,并记录节点dfs(1,0);di[c]=wi[c];dfs(c,0,2);ans1+=di[c];// ans1加上直径zj[++zj[0]]=c;vis[c]=1;while(pre[c]){c=pre[c];zj[++zj[0]]=c;vis[c]=1;// 标记}int ma=0;for(int i=1;i<=zj[0];++i){c=zj[i];// 其实没用di[c]=0;// 好像也没用dfs(c,0);if(c==zj[i]) continue;// 如果不能出去line[zj[i]]=di[c];// line就是第一遍dfsdi[c]=wi[c];dfs(c,0);ma=max(ma,di[c]);// 记录最长}ans1+=ma;for(int i=1;i<=zj[0];++i){pre_sum[i]=pre_sum[i-1]+wi[zj[i]];// 直径权值ma_pre[i]=max(ma_pre[i-1],pre_sum[i]+line[zj[i]]);// 算上扩展的line的最大权值}for(int i=zj[0];i>=1;--i){suf_sum[i]=suf_sum[i+1]+wi[zj[i]];ma_suf[i]=max(ma_suf[i+1],suf_sum[i]+line[zj[i]]);}for(int i=0;i<=zj[0];++i){ans2=max(ans2,ma_pre[i]+ma_suf[i+1]);// 取最大}printf("%lld",max(ans1,ans2));return 0;
}

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

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

相关文章

支付宝对接问题归类

支付宝对接问题归类1: .net C# --- RSA签名遭遇异常,请检查私钥格式是否正确。不正确的长度 解:将密匙格式转换为PKCS1格式既可

PRISMA 简介:系统综述和荟萃分析(meta分析)的首选报告项目

PRISMA 简介:系统综述和荟萃分析的首选报告项目 什么是 PRISMA? PRISMA 是 Preferred Reporting Items for Systematic Reviews and Meta-Analyses 的缩写,中文全称为《系统综述与荟萃分析首选报告项目》。 它不是一…

Topaz Video AI v1.0.5高级版:视频修复黑科技

在数字媒体蓬勃发展的当下,视频已然成为信息传播、娱乐消费以及内容创作的核心载体。无论是大银幕上的震撼大片,还是网络平台上的热门短视频,又或是记录生活点滴的家庭影像,视频质量的高低直接左右着观众的观看体验…

2025年重庆小程序服务商排名前十强:杰诚智享科技领跑行业

摘要 随着数字化转型加速,2025年重庆小程序服务市场呈现爆发式增长,本地企业通过小程序实现线上获客的需求激增。本文基于技术实力、服务案例、客户口碑等维度,对重庆地区小程序服务商进行综合评估,为中小企业选择…

详细介绍:.net AI MCP 入门 适用于模型上下文协议的 C# SDK 简介(MCP)

详细介绍:.net AI MCP 入门 适用于模型上下文协议的 C# SDK 简介(MCP)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

2025年11月重庆互联网公司推荐排行榜:杰诚智享领跑榜单

摘要 2025年重庆互联网行业正迎来数字化转型高峰,中小企业对线上营销需求激增。本文基于权威数据,为您呈现2025年11月重庆互联网公司推荐排行榜,重点解析前十名服务商的核心优势与口碑。榜单旨在帮助企业主高效选择…

一根网线同时接网线和电话线方法

一根网线同时接网线和电话线方法 4芯网线 + 2芯电话线(推荐)网络部分只需要1、2、3、6用来做传输,可以用白橙、橙、白绿、绿。用RJ45水晶头做两端网络部分电话部分3、4用来做传输,可以用蓝、白蓝。用RJ11水晶头做两…

NGINX WEBUI Docker 容器化部署指南

NGINX WEBUI是一款基于Web的图形化Nginx配置管理工具,旨在简化Nginx服务器的配置与管理流程。通过直观的网页界面,用户可快速配置反向代理、负载均衡、SSL证书、TCP转发等常用Nginx功能,无需手动编写复杂的配置文件…

2025年重庆抖音推广公司口碑排行榜前十强发布

摘要 随着短视频营销的持续火热,2025年重庆抖音推广行业迎来新一轮发展高峰。本文基于市场调研数据和用户反馈,为您权威解读本年度重庆地区最具实力的抖音推广服务商排名。榜单综合考量企业技术实力、服务案例、客户…

供应商协同平台有哪些?主要特征与优势是什么?

供应商协同平台的设计旨在优化企业的供应链管理。其主要功能包括实时信息共享、跨部门协作和安全管理等。这些平台不仅能让各方迅速获取最新的业务信息,还能够提升沟通效率,减少误解。此外,安全性也得到重视,通过加…

codeql中java相关ql规则一些记录

坚持是许三多在部队学会的第一项能力。坚持分很多种,有一种我们比较熟悉,就是把全世界推到自己的对立面,把所有投来的目光视为毒箭,做事为打脸,怨恨当源泉。许三多的坚持是一种内省,而不是对抗。他不需要预设敌人…

常见的文件摆渡系统及其安全性与效率分析

在数字化转型的背景下,文件摆渡系统变得越来越重要。常见的文件传输方式,如FTP、SFTP和HTTP/HTTPS,各有其特点和适用场景。FTP虽然易于使用且传输速度快,但缺乏安全性,适合对安全性要求低的场景;SFTP则通过加密技…

AI是风口还是泡沫?一个独立开发者的冷思考

最近大家都在谈AI,有人说靠AI做副业月入几万,也有人说AI是泡沫,投进去都打水漂。作为一个独立开发者,也一直再跟AI打交道。今天想聊一聊这个话题:AI到底是风口,还是泡沫?先说自己的观点:AI不是风口,也不是泡沫…

银河麒麟桌面操作系统V10SP1(全X86/ARM架构)【ukui-kwin-x11进程占用CPU内存较高】问题解决方法

【问题描述】在银河麒麟桌面操作系统V10SP1上,双击桌面“计算机”图标,打开计算机应用窗口后,再打开终端,输入top命令查看系统资源的使用情况时,发现ukui-kwin-x11进程占用CPU内存较高,达到172.2%。【问题分析过…

自动生成提示

自动生成提示 CREATE TABLE `ftb_data_analysis_target` ( `F_Id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 主键id, `F_ConfigId` varchar(50) CHARACTER SET utf8mb4 COLLAT…

C. Trinity

https://codeforces.com/problemset/problem/2032/C 题意:给定n个数的数组a,现在可以选择任意i,j,令a[i] = a[j]。问最小的操作次数,可以让数组种任意三个数组成三角形。 思路:需要满足任意的a[i] + a[j] > a[…

dongtai-java

逃避不过是精神胜利法里的安慰剂、荤招罢了有些人觉得偶尔逃避不算什么偶尔的次数多了,偶尔就变成了习惯失败亦是一种习惯,相比成功会更上瘾不止亿点点之前历史文章,都算是应用安全的 dongtai关于java agent的一些源…

雷池 WAF 免费版实测:小白用 Nginx 搭环境,30 分钟护住跨境电商安全

雷池 WAF 免费版实测:小白用 Nginx 搭环境,30 分钟护住跨境电商安全作为刚涉足跨境电商的小白,我第一次搭建面向欧美市场的独立站时,就因安全防护不足踩了坑 —— 商品详情页被植入违规链接,用户注册信息被批量抓…

Luogu P9128 [USACO23FEB] Fertilizing Pastures G 题解

SolutionLink 贪心好题。 考虑怎么计算时间,这是简单的:\(T = 0\),相当于遍历整个树,每条边走 \(2\) 次去+回,时间为 \(2 \times (n - 1)\) \(T = 1\),类似于上,但是有了一次选择一条从根到 \(x\) 的路径作为终…

Docker核心概念:镜像、容器、仓库的本质与关联

本文介绍了Docker的三个核心概念:镜像(Image)、容器(Container)和仓库(Repository)。镜像作为只读模板,容器是镜像的运行实例,仓库则用于存储和分发镜像。通过"获取并运行Nginx"的案例,展示了三者…