换根dp的通法:1.第一次扫描时,任选一个点为根,在“有根树”上执行一次树形DP,也就在回溯时发生的,自底向上的状态转移。 2.第二次扫描时,从刚才选出的根出发,对整棵树执行一次dfs,在每次递归前进行自上向下的推导,计算出换根后的解。 例题POJ3585 Accumulation ...
浅谈换根DP 本篇随笔浅谈一下算法竞赛中的换根DP。 换根DP概念 换根DP其实是树形DP的一种延伸技巧或者说是方法。 它的使用范围是,对树上的每个点跑树形DP。这样的话,不用换根DP一点一点跑的复杂度就是 O n ,必炸。那么换根DP应运而生。简单来讲,就是我们会通过推理发现,我们先以一个选定节点跑出来的最优解,通过另一个转移方程,就可以得出与他有关系的其他节点的答案。也就是说,我们相当于进行了 ...
2020-09-04 19:39 0 608 推荐指数:
换根dp的通法:1.第一次扫描时,任选一个点为根,在“有根树”上执行一次树形DP,也就在回溯时发生的,自底向上的状态转移。 2.第二次扫描时,从刚才选出的根出发,对整棵树执行一次dfs,在每次递归前进行自上向下的推导,计算出换根后的解。 例题POJ3585 Accumulation ...
今天打 \(Atcoder\) 时遇到了一道换根 \(DP\) ,发现自己不太会,学习了一下。 一般来说,这类题在做树形 \(DP\) 时没有固定的根,可以枚举根然后做 \(N\) 次树形 \(DP\) ,但复杂度是不太优的,于是有了换根 \(DP\),一般通过两次对整棵树的 \(dfs ...
换根dp 一般来说,我们做题的树都是默认 \(1\) 为根的。但是有些题目需要计算以每个节点为根时的内容。 朴素的暴力:以每个点 \(u\) 作为 \(root\) 暴力dfs下去,复杂度\(O(n^2)\); 正确的做法:换根dp,复杂度\(O(n)\)。 执行步骤 第一次扫描,先 ...
传送门 题意 给一颗树,指定一个点,从这个点开始染色,每次只能在已染色点旁边染色,问从每个点开始染色分别能产生多少种染色序列。 题解 这个问题其实就是问一颗有根树的拓扑序列个数。 其实我们知道不是树的有向无环图的拓扑序列个数是个np问题,但是树的拓扑序列个数是一个可解的问题。\(n ...
换根法思想为, 1,随便找一个点作为根进行dp, 2,再以原来点为根进行dp,此次dp,设最优解为 f[x],那么f[root]=d[root],这是显而易见的 然后再通过找d[son]与f[x]之间关系进行dp 比如本道题,若f[x]已知最优解,那么把son换成根,f[x]的最优解即为 ...
虽说这题看大家都改得好快啊,但是为什么我感觉这题挺难。(我好菜啊) 所以不管怎么说那群切掉这题的大佬是不会看这篇博客的所以我要开始自嗨了。 这题,明显是树dp啊。只不过出题人想看你发疯,询问二合一了而已。 对于给出了a数组要求b数组的询问,想象一下怎么求。 你先yy一棵树,我懒得画了 ...
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a、b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字,数组会开不起,该怎么办呢?要用到数位dp. 数位dp一般应用于 ...
辣鸡蒟蒻\(hzf\)终于学会插头dp辣!!!!!! 不过这玩意是真的毒瘤 Ⅰ、前置知识 dp??? 状压dp??? 算了反正写了前置知识也懒得讲 Ⅱ、抛出问题 洛谷板子 题目背景 ural 1519 陈丹琦《基于连通性状态压缩的动态规划问题》中的例题 题目描述 给出\(n ...