Peter算法小课堂—树上建模

太戈编程1720题

题目描述:

传说有一个大家族里共n名男性成员,编号1到n。其中共有n-1条父子关系。现在他们要挑选若干人组成家族护卫队抵抗外族入侵。i号成员的战斗力为z[i], 大家当然希望挑选最强护卫队。但是为了防止"父子矛盾"的魔咒应验,大家决定不会让父子两人同时入选。请问护卫队选出的队员总战斗力最大是多少?

这题简称"树上最优独立集"。我们知道把一个树拉直后就会成为一条树链。

那么思考一下如何DP,如何定义状态。

那状态转移方程呢?

具体的话还是dfs啊

太戈编程861题

题目描述:

二战中,空军司令lester奉命布置对敌方阵地的轰炸,以破坏其通讯体系。敌方通讯网络共n个节点,之间有n-1条双向直接通信通道。轰炸之前,任意两个节点都可以通过直接或间接通信取得联系。lester的弹药量很有(han)限(chan),只能炸毁其中一个节点,与被炸节点的直接通信将被全部切断,而剩余n-1个节点将被分割成无法互相通信的若干区域,而每个区域内部仍可互相通信。lester想知道如何才能使剩下的仍可通信的最大区域最小

这题是个树的重心问题。

太戈编程763题

题目描述:

盗墓界的三巨头:lester天真无邪,葛胖胖,职业失踪z70。有一次他们去到一个古墓,共有n个墓室,通过n-1条双向通道相连(保证两两墓室都可达)。每条通道长1公里。lester他们不小心走散了,分别走到三个墓室lester位于x,葛胖胖位于y,z70位于z。现在葛胖胖和lester想知道他俩之间的距离是多少?

看了这张图,是不是感觉能做了?但是,时间复杂度为O(T*N),那要得运行多少次啊。 那思考一下,时间浪费在那里了?

那么我们手算以下样例,发现:路径必须经过u和v的最近公共祖先节点a。则路径长度为d[u]-d[a]+d[v]-d[a]

最近公共祖先简称LCA,采取同步爬树法,代码如下

cpp 复制代码
int lca(int u,int v){
	while(u<v) u=p[u];
	while(v<u) v=p[v];
	while(u!=v) u=p[u],v=p[v];
	return u;
}
相关推荐
x_yeyue35 分钟前
三角形数
笔记·算法·数论·组合数学
念何架构之路2 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑2 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光2 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩3 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494733 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ4 小时前
单词拆分----dp
算法
智者知已应修善业5 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业5 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机