首页 > TAG信息列表 > 子树中
判断是否为子节点/判断节点在是否在另一节点为根的子树中
如下题解中绿色三角形所示: 可以在一次DFS中,处理出节点的进出“时间”,这样,如果是有亲缘关系的节点,则会有时间上的包含关系。 时间用全局变量表示,进入DFS函数时记录进入时间,DFS完全部子树后,返回前,记录出时间。 https://www.bilibili.com/video/BV1pW4y1r7xs?spm_id_from=333.999.0.0cf1695 D2. Tree Queries (Hard Version)
题意: 给定一棵边权为1的树,树中有一个特殊节点但不告诉你是哪个。你可以询问一个节点集 \(S\),然后知道特殊点到 \(S\) 中每个点的距离。输出能确定特殊点的 \(|S|\) 的最小值 \(n\le 2e5\) 思路: 题目转化为:对任意点 \(u\),怎样区分特殊点与 \(u\)? 再转化为:要能区分任意两点。即对任POJ - 2486 Apple Tree(树形dp)
题目链接 题目大意 有一棵以1号点为根的树,每个树上有一定的苹果,你可以在树上来回走k步,问最多拿多少种苹果。 解题思路 每个点一共有三种状态,一种是经过这个点一共走x步到了某个点,一种是回到这个点,一种是没回到这个点。 状态表示: dp[i][j][1]: 回到了i点,一共在i的[atARC121E]Directed Tree
令$b_{a_{i}}=i$,那么问题即要求$i$不是$b_{i}$的祖先,也即$b_{i}$不严格在$i$的子树中 显然$a_{i}$和$b_{i}$一一对应,因此我们不妨统计$b_{i}$的个数 考虑容斥,令$f(S)$为$\forall i\in S,b_{i}$严格在$i$子树中的排列数,根据容斥答案即$\sum_{S\subseteq [1,n]}(-1)^{|S|}f(S)$ 关于5.3 下饭考试2
5.3考试下饭合集### T3 超级树 因为在T1的tarjan伪算法和T2的伪二分上浪费了太多时间(蒟蒻下饭不需要理由),T3看到后没怎么想,上手就推公式。结果推了二十来分钟,根本推不出来,情况过于复杂了,于是就放弃,打了两个表。就这最后还是忘了提交代码,我真行(鼓掌) 正解用的是计数dp(又是没学过的[蓝桥杯][2015年第六届真题]生命之树
最大子段和的树上扩展。 状态表示: \(f[u]\):在以\(u\)为根的子树中包含u的所有连通块中的权值的最大值。 状态转移: 如果子树中存在权值和为正的连通块,则包含上该子树,否则丢弃。 \[f[u]=w[u]+\max(f[s_1],0)+\max(f[s_2],0)+\cdots+\max(f[s_k],0) \]\(s_1,s_2,\cdots,s_k\)是\(u\)