随笔分类 - 树上问题—点分治
摘要:点分治好题 统计距离正常点分治统计即可,我们只需考虑何时达到最优 有两种情况: 第一:代价最大的询问两个端点在不同的两个子树中 因为这种情况下,无论根向那个子树移动都会等价地增加到达另一个端点的代价,因此此时总代价已经达到最小 第二:代价最大的询问有多组,且这些点不在同一棵子树中 同情况一,如果我们
阅读全文
摘要:太久没碰点分治的我看见这题已经失了智... 首先这种统计肯定要想一想点分,当然也有树形dp的做法,不过还是用点分吧... 我们每次找到一个根,然后统计以这个根为中心,模3为0,1,2的路径数量(这一点可以直接搜索),然后做个卷积统计一下即可 但是可能会出现重复的情况,重复来源于这种时候: 如图所示,
阅读全文
摘要:首先很容易看出这是一个树上多重背包问题 设状态表示以为根的子树中利用的体积是 但是题目中有要求:选择的点集必须是一个联通块 这要怎么处理? 点分治! 首先我们利用点分治的思想,每次拎起一个根节点进行处理,要求这个根节点必选,然后在子树内进行dp 为了保证根节点必选(至少
阅读全文
摘要:还是点对之间的问题,果断上点分治 同样,把一条路径拆分成经过根节点的两条路径,对不经过根节点的路径递归处理 然后,我们逐个枚举根节点的子树,计算出子树中某一点到根节点的距离,然后在之前已经处理过的点中找,看有没有距离之和等于k的,如果有就取最小值(这里用桶维护即可) 然后再把这个子树内的信息扔进桶里
阅读全文
摘要:题目描述:这里 发现还是点对之间的问题,于是还是上点分 只不过是怎么做的问题 首先对每条边边权给成1和-1(即把原来边权为0的边边权改为-1),那么合法的路径总权值一定为0! 还是将路径分为经过当前根节点和不经过当前根节点的,对不经过当前点的递归处理 那么我们讨论经过当前根节点的路径算法即可 可以发
阅读全文
摘要:点分治入门题 首先发现是树上点对的问题,那么首先想到上点分治 然后发现题目要求是求出树上点对之间距离小于等于k的对数,那么我们很自然地进行分类: 对于一棵有根树,树上的路径只有两种:一种经过根节点,另一种不经过根节点 对于经过根节点的路径,我们可以通过计算出每个点的根节点的距离,然后相加就能求出点对
阅读全文