随笔分类 -  树->点分治

摘要:动态点分治。 阅读全文
posted @ 2019-07-08 18:05 LiGuanlin 阅读(315) 评论(0) 推荐(0)
摘要:题目描述: 给一棵树,$q$次询问,每次给出$l$,$r$,$x$,求点$x$到$l$,$l+1$……$r$距离的最小值。 题解: 动态点分治。 考虑树上任意一条路径经过的最高级重心只能有一个,我们可以先建出点分树,在点分树上的每个节点存当前子树所有节点到该节点距离的最小值。 对于每次查询,可以让$ 阅读全文
posted @ 2019-03-28 08:49 LiGuanlin 阅读(70) 评论(0) 推荐(0)
摘要:题目描述 题解: 好像和皮皮鼠那题一模一样。 代码: 阅读全文
posted @ 2018-12-28 14:44 LiGuanlin 阅读(183) 评论(0) 推荐(0)
摘要:题目描述 题解: 动态 点分治。 点分治可以帮助我们将树上的点分层,如果我们把这些点按生成顺序建树的话,我们会得到一棵点分树。 点分树有一个特别好的性质,就是不管原来的树长什么样,建出来的点分树的深度都大约是$logn$。 而且若在点分树中a有一个儿子b,那么在原树中a的管辖子树(即找a作重心的子树 阅读全文
posted @ 2018-12-28 14:42 LiGuanlin 阅读(145) 评论(0) 推荐(0)
摘要:题目描述 题解: 这位仁兄您点进来的题解是cdq+点分+斜率优化的。 吐草:细节是真多…… 先推一波式子: $dp[i]=min(dp[j]+(dis[i]-dis[j])*p[i]+q[i])=dis[i]*p[i]+q[i]+min(dp[j]-dis[j]*p[i])$ $min()$里面那个 阅读全文
posted @ 2018-12-28 14:02 LiGuanlin 阅读(178) 评论(0) 推荐(0)
摘要:题目描述 题解: 先要建一棵字典序最小的最短路树。 怎么建呢? 想起后缀数组,然后突然意识到可以按字典序依次搜索每一个点。 具体操作就是搜索时将可以转移到的点记录一下,然后按字典序排序,然后一个一个走。 这样最短路径树就建好了。 然后就是点分治+桶。 代码: 阅读全文
posted @ 2018-12-28 13:46 LiGuanlin 阅读(137) 评论(0) 推荐(0)
摘要:题目描述: 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000。 题解: 用桶存一下,然后每次换边的时候更新答案+合并桶。 代码: 阅读全文
posted @ 2018-12-28 13:39 LiGuanlin 阅读(119) 评论(0) 推荐(0)
摘要:题目描述: 马上就是小苗的生日了,为了给小苗准备礼物,小葱兴冲冲地来到了商店街。商店街有n个商店,并且它们之间的道路构成了一颗树的形状。 第i个商店只卖第i种物品,小苗对于这种物品的喜爱度是wi,物品的价格为ci,物品的库存是di。 但是商店街有一项奇怪的规定:如果在商店 u,v买了东西,并且有一个 阅读全文
posted @ 2018-12-28 13:35 LiGuanlin 阅读(166) 评论(0) 推荐(0)
摘要:题目描述 题解: 首先我们应该注意,这道题问的是: 对于点对(a,b),存在点c在ab路径上,且a<->c和b<->c都是阴阳平衡的合法点对(a,b)有多少对。 因此这玩意是树链统计。 阴阳平衡就是$1+(-1)=0$; 用点分治搞一搞。 仔细看一看,你很快发现如果a->b和a->b->c相等的话, 阅读全文
posted @ 2018-12-28 13:28 LiGuanlin 阅读(134) 评论(0) 推荐(0)
摘要:题目描述: 给出一棵树,求距离不超过k的点对对数。 题解: 点分治板子题。 对于一棵树,我们可以$O(n)$时间求出其重心。(重心:切开这个点得到一堆树,所有树的最大大小最小) 如果我们将一棵树不断找重心->分开->找重心……,我们可以将这棵树分成若干部分。 这个东西叫点分治。 因此将一棵树不断分开 阅读全文
posted @ 2018-12-28 12:53 LiGuanlin 阅读(120) 评论(0) 推荐(0)