树形动态规划之树的最大独立集

C++树形DP基础例题————— 树的最大独立集 题目描述: 对于一棵有N个结点的无根树,选出尽量多的结点,使得任何两个结点均不相邻(称为最大独立集)。 题目输入: 第1行:1个整数N(1 <= N <= 6000),表示树的结点个数,树中结点的编号从1..N 接下来N-1行,每行2个整数u,v,表示树中的一条边连接结点u和v 题目输出: 第1行:1个整数,表示最大独立集的结点个数 样例输入: 11 1 2 1 ... 阅读详情

树的最大独立集

对于一颗n个结点的无根树,选出尽量多的的结点,使得任何两个结点均不相邻(称为最大独立集),然后输入n-1条无向边,输出一个最大独立集(如果有多解,则任意输出一组)。

分析:

用d(i)表示以i为根结点的子树的最大独立集的大小。此时需要注意的是,本题的树是无根的:没有所谓的父子关系,而只是一些无向边。没关系,只要任选一个跟r,无根树就变成了有根树,上述状态的定义也就有意义了。

结点i只有两种决策,选和不选。如果不选i,则问题转化为求出i所有的儿子的d值再相加;若选i,则它的儿子全部不能选,问题转化为了求出i的所有孙子的d值之和。换句话说,状态转移方程为:

d(i)=max{1+Ed(j)(j属于gs(i)),Ed(j)(j属于s(i))}

其中gs(i)和s(i)分别代表i的孙子集合和儿子集合。

代码应该如何编写呢?上面的方程涉及“枚举结点i的所有儿子和孙子结点”,颇为不便。其实可以换另一个角度来看:不从i找s(i)和gs(i)的元素,而从s(i)和gs(i)的元素找i。换句话说,当计算出一个d(i)后,用它去更新i的父亲和祖父结点的累加值Ed(j)(j属于gs(i)和Ed(j)(j属于s(i))。这样一来,每个结点不必记录其子结点有哪些,只需记录父结点即可。


动态规划(9):树形动态规划 摘要 树形动态规划(Tree DP)是动态规划在树结构上的应用,通过分解子树问题自底向上求解。其核心在于状态定义(如dp[u][state])和转移方程设计,通常采用后序遍历确保子节点状态先计算完成。经典问题如树的最大独立集,通过定义节点选择/不选择的状态,利用转移方程dp[u][0] = sum(max(dp[v][0], dp[v][1]))和dp[u][1] = 1 + sum(dp[v][0])求解。树形DP适用于网络分配、路径优化等问题,具有高效性和结构性优势。 阅读详情

相关推荐

11.动态规划:树形DP问题、树上最大独立集、树上最小支配集、换根DP、树上倍增(LCA)【灵神基础精讲】

来源0x3f:https://space.bilibili.com/206214

qq_42958831的博客 4415

树上的动态规划学习5 - 树的最大独立集

树的最大独立集的意思就是说,对于一棵n个节点的树(G=&lt;V,E&gt;),选出尽量多的点组成一个集合,使得该集合的任何两个点没有边相连。解法1: 用二维数组d[u][k]表示以u为根的子树中,选(k=1)或不选(k=0)u所得到的最大独立集的节点的个数。注意,这里必须用二维数组,单单用一个d[u]会混淆选或不选两种情形。#include &lt;iostream&gt;#include &l...

roufoo的博客 2339

CSP-J/S 复赛算法 树形动态规划

树形动态规划是一种专门用于树结构上求解最优化问题的技术,广泛应用于计算机科学中的多个领域。在CSP-J/S复赛的算法题中,树形动态规划常常被用来解决与树结构相关的复杂问题,如路径最大化、节点选择、覆盖问题等。与线性动态规划相比,树形动态规划具有更高的灵活性和适应性,能够有效地处理具有层次关系的复杂数据结构。树形动态规划的核心思想在于通过递归或深度优先搜索(DFS)的方法,从树的叶子节点开始逐层计算,利用子节点的最优解逐步推导出父节点的最优解。

m0_62599305的博客 1858

[树形DP] 树的最大独立集

文章目录题目描述输入输出样例输入样例输出解题思路 题目描述 对于一棵有N个结点的无根树,选出尽量多的结点,使得任何两个结点均不相邻(称为最大独立集)。 输入 第1行:1个整数N(1 &amp;lt;= N &amp;lt;= 6000),表示树的结点个数,树中结点的编号从1…N 接下来N-1行,每行2个整数u,v,表示树中的一条边连接结点u和v 输出 第1行:1个整数,表示最大独立集的结点个数 样例输入 11 ...

烟尘的博客 1556

CH341的I2C流模式(StreamI2C)到底怎么用?从EEPROM读写到自定义设备,一篇讲清参数配置逻辑

本文详细解析了CH341的I2C流模式(StreamI2C)的使用方法,从EEPROM读写到自定义设备的参数配置逻辑。通过深入分析I2C协议基础、StreamI2C参数映射关系及典型设备配置示例,帮助开发者快速掌握StreamI2C的应用技巧,解决实际开发中的常见问题。

weixin_30932215的博客 447

BK7238(XH-WB3S)固件烧录实战:从AT固件选择到稳定下载全解析

本文详细解析了BK7238(XH-WB3S)模组固件烧录的全过程,从AT固件版本选择到稳定下载的实战技巧。重点介绍了烧录前的准备工作、硬件连接的正确姿势、烧录软件的实战技巧以及疑难问题排查指南,帮助开发者高效完成BK7238模组的固件烧录。

weixin_29159441的博客 248

树形DP—最大独立集

最大独立集:对于图G=<V,E>,从V中取尽量多的点组成一个集合,使得这些点之间没有边相连 对于最大独立集,每个点也只有两种状态,即属于点 i 属于独立集或者不属于独立集两种情况: dp[i][1]表示点 i 属于独立集的情况下,最大独立集中点的个数. dp[i][0]表示点 i 不属于独立集的情况下,最大独立集中点的个数. 对于第一种状态dp[i][1],由于 i 点属于独立集,所...

桃夭丶的博客 344

GDI文字绘制和windows下opengl文字绘制小结

GDI绘制文字,要设置文字的属性,主要就是通过设置DC中的font对象来实现的。 font对象的创建可以由createfont()、createfontIndirect()来实现。 HFONT CreateFont( int nHeight, // height of font int nWidth, // average

T_W_S的专栏 5321

树的最大独立集(dp)

树的最大独立集合:对于一颗无根树,选出尽量多的点使得任何两个结点均不相邻   问题分析:   选择一个结点作为根节点。d(i)表示以i节点为根结点的子树的子树的最大独立子集。每个结点只有选择与不选择两种状态。     d(i,1)表示以i结点为根且选择i结点的子树的最大独立集。   d(i,0)表示以i结点为根且不选择i结点的子树的最大独立集。   结果就是选取一个点i作

NSSWTT的博客 984

13、网络通信中的字节序与内存测试

本文主要探讨了网络通信中的字节序问题以及嵌入式系统中内存测试的相关内容。在网络通信部分,重点分析了大端序和小端序的差异,以及TCP/IP协议中字节序的转换机制,并介绍了相关的宏定义和实现方法。在内存测试部分,详细阐述了内存测试的目的、常见问题以及具体的测试策略,包括数据总线测试、地址总线测试和设备测试。通过这些内容,嵌入式程序员可以更好地理解并解决实际开发中可能遇到的字节序和内存问题,从而提高系统的稳定性和可靠性。

mmm90的博客 110

AndroidKiller之APK 编译失败,无法继续下一步签名【BUG解决】【App反向解析】

文章目录项目场景:问题描述原因分析:解决方案:BUG解决 项目场景: AndroidKiller: 在反向解析APP包时报错:APK 编译失败,无法继续下一步签名。 网上很多方法都是无效的哈,我追究原因发现,这个bug的出现大部分情况都是因为Apktool的问题。 此方法:百分之百解决此bug! 错误如下: 问题描述 APK 编译失败,无法继续下一步签名! 原因分析: Apktool版本不适配的问题,现在的技术更新换代太快,我们安装AndroidKiller的时候,有时候不是官方渠道的话,他的版本是非常

一键难忘的博客 2万+

树的最大独立集 《算法竞赛入门经典》P171

树的最大独立集 《算法竞赛入门经典》上的一个题目,

qq943574281的专栏 676

随机优化 (Stochastic Optimization) 算法详解及案例分析

随机优化是一种用于处理包含随机变量的优化问题的方法。其目标是通过考虑随机变量的概率分布,找到一个在期望意义下最优的解。

闲人编程的博客 4179

动态规划(四):树形DP——树上最大独立集、树的直径、树形背包

树形DP是在树结构上进行的动态规划。由于树天然的递归特性,通常采用深度优先搜索(DFS)的方式,先处理子树,再向上汇总信息。树形DP广泛应用于树上的最优化问题,如选择节点、计算最长路径、分配资源等。树上最大独立集:选择不相邻的节点,使权值和最大(如“打家劫舍 III”)树的直径:树中相距最远的两个节点之间的距离树形背包:在树上做分组背包,每个子树可选若干节点每部分均包含一句话记住核心思想流程图推荐代码实现LeetCode实战(附题目链接及解题代码),让你彻底掌握树形DP的套路。问题类型状态定义。

2302_81155164的博客 1325

【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试

  人的前程关于眼界、关乎格局。   志之所趋,无远弗届,穷山复海不能限也;   志之所向,无坚不入,锐兵精甲不能御也。 一、I2C驱动框架简介   Linux内核将 I2C 驱动分为两部分: ①、 I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 ②、 I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 1....

悟已往之不谏 知来者之可追 1068

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2463

牛客题解 | 04.09_树形dp

牛客题库题解

wc529065的博客 1168

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

最大独立集专题

最大独立集专题 本文着重介绍一些特别的图的有关最大独立集的问题。 part1.树上最大独立集 例题:没有上司的舞会 题目描述 某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加...

weixin_30511039的博客 697

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

动态规划模型总结之树形dp

刚讲完状压,我们来讲讲树形dp 1.基本概念 树形dpdpdp,顾名思义就是在树上做动态规划,通过若干次的遍历树,得到有用的信息,解决问题 树形dpdpdp的枚举顺序类似线性dpdpdp,也有两个方向: ①:叶→根:根的子节点传递有用的信息给根,由根得出最优解 ②:根→叶:需要取出所有点作为根节点求值,最后根节点获得整棵树的信息 动态规划的顺序一般是后序遍历,即当子节点处理完成再处理父节点 树形d...

Hacheylight 774

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

树形dp相关

前言 1:与树或图的生成树相关的动态规划。 2:以每棵子树为子结构,在父亲节点合并,注意树具有天然的子结构。这是很优美的很利于dp的。 3:巧妙利用Bfs或Dfs序,可以优化问题,或得到好的解决方法。 4:可以与树上的数据结构相结合。 5:树形Dp的时间复杂度要认真计算,部分问题可以均摊复杂度分析。 6:一般设f[u]表示u子树的最优价值或者是说方案数。 或者\(f[u][k]\)表示u...

weixin_30886233的博客 314

树形DP讲解

在图论中,树被定义为一个连通且无圈的图。树的分形结构意味着树的每个子树也是一棵完整的树,这使得树形DP天然适合递归求解。树的这种结构允许我们从底部向上进行问题求解,即先求解子问题,再合并子问题的解来求解更高层次的问题。在树形DP中,我们需要定义一个状态来表示子问题的解。这个状态通常包含了子树的所有信息,例如子树的大小、子树的和、子树中的最大或最小值等。状态的定义取决于具体问题的需求。树形DP是一种强大的算法工具,它通过利用树的结构特性来解决复杂的优化问题。

ning的博客 1083

树的最大独立集

例题1: hdu1520:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意: 给一颗树,给各个结点的权值,选择若干结点,结点之间不能直接相连,求结点的最大权值和(即任意结点之间没有父子关系) 解析: 树的最大独立集合,在树上dp操作,选了该结点,就一定不能选该结点的子节点 dp[i][0]表示以i为根的树,不选该根结点的权值最大和 ...

wangtao的博客 555

树形DP-核心基础

树形动态规划(Tree DP)是动态规划在树结构上的应用,它结合了树的递归特性与DP的“分解子问题”思想,专门用于解决树结构中的最优解问题。从“树的最大独立集”到“二叉树的直径”,从“树上背包”到“树的中心”,树形DP都发挥着核心作用。本文我将从树形DP的基础概念出发,详解其核心思想、实现步骤、经典案例及解题技巧,结合代码实现与实例推演,带你入门这一重要的算法领域。

1336

动态规划 之 树形DP

动态规划 之 树形DP

牛牛博士博客 833

日记(周中+树形dp小总结)

这几天看了dp中的树形dp的部分,并且做了几道题。      一般的dp是在线性结构中,在树形结构中的dp是比线性结构中dp效率高的,而在树形结构是很有利于做递归的所以树形dp很多都是递归来实现。      一般的树形dp中的递归有两种(目前见过两种),1先递归子节点,再利用子节点信息更新本结点信息。2先更新本结点信息,再递归子节点。      题型也是不少,我也见识了不少了。 1  树的

a1046765624的博客 300

7.4 树形DP

7.4 树形DP 树形DP在紫书上9.4那章节提到过一部分,但介绍的非常简单(也可能是当时水平有限),现在在黑书上进行更专项的学习。 树形DP是指在“树”这种数据结构上进行的DP:给出一棵树,要求以某种最优的方式(最少的代价或者最大收益)完成给定的操作。由于树的结构本身具有一定递归的性质(树和子树的关系),比起线性DP,树形DP的状态转移方程更加直观。 树的最大独立集(类题) 我们在紫书上是学习过树的最大独立集问题的,那为什么这里要加个类题呢? 首先这是原问题: 树的最大独立集 对于一棵n个结点的无根树,

weixin_55835175的博客 869
上一篇: 动态规划hdu2501
下一篇: 蓝桥杯结点选择(树形动态规划)
Round_Yuan
博客等级 码龄10年 26粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值