Peter算法小课堂—树上建模

太戈编程1720题

题目描述:

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

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

那么思考一下如何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。则路径长度为du-da+dv-da

最近公共祖先简称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;
}
相关推荐
To_OC5 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia17 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
zephyr059 小时前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米10 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
卡提西亚11 小时前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结11 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_12 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
Tisfy12 小时前
LeetCode 3867.数对的最大公约数之和:按题目说的做(gcd)
算法·leetcode·题解·模拟·最大公约数·gcd
泷寂12 小时前
最小生成树 (MST基础)
算法
Daniel_12313 小时前
数组——总结篇
算法