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;
}
相关推荐
辰烨chenye10 分钟前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
罗西的思考42 分钟前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
玖玥拾1 小时前
LeetCode 219 存在重复元素 II
算法·leetcode·哈希算法·散列表
知无不研2 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
a187927218313 小时前
【算法】动态规划第四篇:背包收官——min 哨兵、计数世界与组合排列分水岭
算法·leetcode·动态规划·dp·01背包·算法讲解·决策合并
2601_962297484 小时前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
辰烨chenye4 小时前
LeetCode Hot 100 题解 · 子串篇
算法·leetcode·职场和发展
辰烨chenye4 小时前
LeetCode Hot 100 题解 · 堆篇
java·算法·leetcode
手写码匠4 小时前
华为云Flexus+DeepSeek征文|DeepSeek 应用监控告警体系实战:从“用户投诉才知道“到“故障前就发现“
人工智能·深度学习·算法·aigc
shehuiyuelaiyuehao5 小时前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法