最近公共祖先
_beginend
这个作者很懒,什么都没留下…
展开
-
bzoj 1787: [Ahoi2008]Meet 紧急集合 lca
题意给定一棵树,每次给出三个点,求一个点使得这三个点到该点的距离和最小。 n,q<=500000分析答案就是两两lca中深度最大的那个。代码#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std;const int N=500005原创 2017-10-13 19:26:11 · 334 阅读 · 0 评论 -
Codeforces 425 (Div. 2) D lca
题意给出一棵树,每次询问给出三个点a,b,c,要求从中选出一个点,使得另外两个点到这个点的公共路径尽量长。 n,q<=100000分析比赛的时候一开始想的是用lca瞎讨论一发,讨论得我意识模糊都没有搞出来,最后用树剖套线段树大力搞了一发,结果T了。。。如果切了这题的话估计rating可以升好多呢。 恩这题其实只要找出a,b,c两两lca中最深的那个,然后求其到a,b,c的距离的最大值就好了。原创 2017-07-25 10:47:55 · 346 阅读 · 0 评论 -
bzoj 4568: [Scoi2016]幸运数字 倍增维护线性基
题意给出一棵树,每个节点都有一个权值,每次询问x到y的路径上任意选若干个节点的最大异或值。 n<=20000,m<=200000,a[i]<=260n<=20000,m<=200000,a[i]<=2^{60}分析一看到题目就知道是用线性基来维护,想到了用倍增来维护线性基,但觉得复杂度太大了,应该会超时,于是就不敢打。去网上搜了题解发现其实就是这样做就好了。 也就是每次暴力合并线性基即可。代码#原创 2016-12-20 19:57:28 · 394 阅读 · 0 评论 -
bzoj 3611: [Heoi2014]大工程 虚树+树形dp
题意国家有一个大工程,要给一个非常大的交通网络里建一些新的通道。 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上。 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的最短路径。 现在国家有很多个计划,每个计划都是这样,我们选中了 k 个点,然后在它们两两之间 新建 C(k,2)条 新通道。 现在对于每个计划,我们想知道: 1.这些新通道的代价原创 2016-12-15 20:58:44 · 347 阅读 · 0 评论 -
bzoj 2144: 跳跳棋 lca+倍增
题意跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移动成x,y,z。(棋子是没有区别的)跳动的规则很简单,任意选一颗棋子,对一颗中轴棋子跳动。跳动后两颗棋子距离不变。一次只允许跳过1颗棋子。 写一个程序,首先判断是否可以完成任务。如果可以,输出最少需要的跳动次数原创 2017-12-22 20:21:36 · 375 阅读 · 0 评论