『树形DP·换根』The Crazy Tree(毒瘤)

给定一棵树,定义疯子树为满足特定权值条件的联通子图。求解包含节点最多的疯子树的节点数。通过树形DP,以不同节点为根进行换根处理,找到最大节点数的疯子树。时间复杂度为O(N)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给定一棵 nnn 个结点的树,结点编号为 1−n1-n1niii号结点的权重记为 wiwiwi(每个点的权值各不相同)。我们定义一个“疯子树”为: 1. 是一个联通子图。 2. 我们将子图内的点按照权重从小到大排序后序列为 b1,b2,…,bmb1,b2,…,bmb1,b2,,bm,对于任意的i(i&lt;m)i(i&lt;m)i(i<m),bibibibi+1bi+1bi+1。最短路径(不含bibibibi+1bi+1bi+1)上的结点的权值都小于等于wbiw_{bi}wbi。输出包含结点最多的“疯子树”的结点数。

题解

首先,树中两点的路径唯一,不需要考虑最短路。

其次,我们考虑一下疯子书这个树有什么特殊的性质:

  • 我们发现,每一棵疯子树中任意两点间的权值都小于这两个点。如果是一条链的话,必然是连续的不断并且一次递减;如果是一棵树的话,这棵树和每一个子树都满足根节点为最小点的树一定是疯子树。

显然,以不同的节点为根会产生不同的答案,由于题目中说的是无根树我们可以采用换根的方法来进行处理。

我们设g[x]g[x]g[x]表示以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值