随笔分类 - 树论——点分治&动态点分治
摘要:【传送门:BZOJ3697】 简要题意: 给出一棵n个点的树,树上的边权要么为0,要么为1 要求找出有多少条路径,满足: 1.路径上0的数量等于1的数量 2.能够在这条路径上找到一个点(不包括起点和终点),使得起点到这个点,终点到这个点所构成的两条路径都满足条件1 题解: 点分治 对于一个分治中心,
阅读全文
摘要:【传送门:BZOJ1316】 简要题意: 给出一棵n个点的带边权有根树 有q个询问,每个询问输入len,判断在树上是否存在长度为len的路径 题解: 直接点分治,用set保存链的长度就行了 参考代码:
阅读全文
摘要:【传送门:BZOJ2599】 简要题意: 给出一棵n个点的树,和每条边的边权 求出所有距离为k的点对中,两个点之间的最少边数 题解: 点分治好题 设c[i]为当前点分治的时候与根的距离为i的最小边数 因为我们不能使得求出来的点对都在一棵子树里面,所以我们枚举每一棵与根相连的子树,每次求出对于这棵子树
阅读全文
摘要:【传送门:BZOJ2152】 简要题意: 给出一棵n个点的树,和每条边的边权,求出有多少个点对,它们的距离为3的倍数 最后输出求出的点对数/总点对数的最简分数 题解: 点分治例题 求值时设t[i]为路径的值%3==i的情况数,那么答案就为t[1]*t[2]*2+t[0]*t[0] 参考代码:
阅读全文
摘要:【传送门:BZOJ1468&BZOJ3365】 简要题意: 给出一棵n个点的树,和每条边的边权,求出有多少个点对的距离<=k 题解: 点分治模板题 点分治的主要步骤: 1、首先选取一个点,把无根树变成有根树。 那么如何选点呢? ——树形DP 因为树是递归定义的,所以我们当然希望递归的层数最小。 每次
阅读全文