若加 权图 G=fV,目的顶点集 的子集 中的任何 顶点 之间都不相邻 ,则称 为 图 G的独立集 ,顶点个数最多的独 立集称为最大独立 集。各顶点权 重之和最大 的独立集称为图 G的最大加权独立集 。如图 1所示 ,顶点集合 (4,3,1)是该图 的一个独立集, 且是最 大独立集 ,但不是最大加权独立集 。 顶点集合(5,2)是独立集,且是最大加权独立集 。最大加权独 立集 问题 已被证明为是个 NP完全问题。
一棵树,每个点有一个权值,选择一个权值最大的无父子节点点集。
关键词:树的最大”权值“独立集
f[i][0]:以i为根的子树不选根节点最大权值,
f[i][1]:以i为根的子树选根节点最大权值
f[u][1]+=f[v][0];
f[u][0]+=max(f[v][1],f[v][0]);
注:
1.若所有点的权值都大于0,则树的最大”权值“独立集也是极大点独立集,即任选两个点,一定有且仅有一个在该集合中。若存在点的权值小于0,则不一定成立。
变题:选择一个无祖先与后代节点的最大权值点集
f[u]:以i为根的子树的最大权值
f[u]=max{ w[u],sum{f[v]},v是u的孩子 } 两个选择:当前节点/后代,两个选择互斥
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define sf scanf
#define pf printf
#define maxn 10000
#define inf 0x3f3f3f
#define INF 1ll
关注
打赏
热门博文
- DevOps实践教程 华为云 系列教程2021 合集
- ❤️Python Django网站开发 2021年最新版教程 合集❤️
- ❤️java多线程并发编程入门 教程合集❤️
- ❤️区块链Hyperledger Fabric 老版本 1.1.0 快速部署安装 教程合集❤️
- ❤️Docker教程小白实操入门 教程合集❤️
- ❤️微信小程序 云开发 教程合集(视频+图文)免费❤️
- C++ boost::asio::io_service创建线程池thread_group简单实例
- C++ error: ‘shared_ptr’ was not declared in this scope
- git 代码回滚回退到指定版本 并 提交
- C++ 得到map中最后一个元素