随笔分类 -  图论——树的直径&LCA

摘要:Description 给定一棵树,求每一个点能到达的最远的距离是多少 Solution 树形dp 我们利用“二次扫描与换根法”的思想,首先假定1节点为根,然后在这棵有根树上进行一次dp,求出从每一个节点出发在其子树内最远和次远距离,记为sum1,sum2 我们在定义ans[i]表示在当前这棵有根树 阅读全文
posted @ 2019-08-10 19:43 AD_shl 阅读(178) 评论(0) 推荐(0)
摘要:这是一道树链剖分/树上差分/LCA的题目…… 本来想打一遍树剖,但是被那强大的码量劝退了,于是我开始思考树上差分。 我们先把每个点深度的k次方打一个表,之后我们因为要做减法,所以我们令vali,k​表示i到1号点路径上点深度的k次方之和 然后问题来了,我们维护的是点权和,所以我们发现直接减的话会导致 阅读全文
posted @ 2019-05-03 15:40 AD_shl 阅读(150) 评论(0) 推荐(0)
摘要:读完题,我产生了一个显然的想法:先求出这张图的最大生成树,然后再dfs一遍求出联通块的个数(图可能不连通),之后这张图变成了一棵树,题目就变成了在一棵树上给定一条路径,求这条路径上最小的边权是多少。(-1的情况可以通过并查集直接判断)。 考虑一条路路径(x,y),我们可以把它拆分成(x,lca(x, 阅读全文
posted @ 2019-05-02 15:27 AD_shl 阅读(259) 评论(0) 推荐(0)
摘要:这是一道毒瘤的LCA的题目。 我们对这棵树进行一次dfs,求出每一个点的时间戳,不难发现,我们按照时间戳排序,把异象石的节点排序,并且累加相邻两点的路径,最后的结果就是所求答案的两倍。 因此,我们采用STL中的set,按照时间戳递增的顺序维护异象石出现的序列,并用变量ans记录相邻两点的距离之和,那 阅读全文
posted @ 2019-05-02 13:31 AD_shl 阅读(306) 评论(0) 推荐(0)
摘要:关于lca和树上差分的题目。 根据题目描述,主要边是一棵树,附加边会和主要边构成一个环,如果我们第一步切断了一条主要边,我们下一步就必须切断一条附加边才能符合题意。 所以,我们可以认为一条附加边(x,y)把树上x,y之间的路径覆盖了一遍,我们需要统计每条主要边被覆盖多少次即可。具体地,如果第一步我们 阅读全文
posted @ 2019-05-01 19:34 AD_shl 阅读(128) 评论(0) 推荐(0)
摘要:这是一道关于树的直径的好题,值得一刷。 本题有两个难点,一个是分类讨论k,另一个是代码的实现(其实还好)。 本题k可以为1或2,因此我们分类讨论一下。 当k=1时,我们可以任选两个点连接,假设我们一条边都不连接,那么我们需要走2*m次,其中m为边的数量。假设我们在x,y上连一条边,那么我们用1个距离 阅读全文
posted @ 2019-05-01 14:33 AD_shl 阅读(197) 评论(0) 推荐(0)
摘要:本题当然可以用树剖解决,而且是树剖的模板题。但是对于本题来说,有一种更巧妙的办法 树上差分 类似于普通的差分,我们对于题目中的每一条路线i->j,把它拆成i->lca(i,j)->j.然后将i点、j点的权值加一,将lca(i,j)的权值减二 乍看起来没什么毛病,但是仔细想想,对lca(i,j)的子树 阅读全文
posted @ 2019-03-16 19:48 AD_shl 阅读(273) 评论(0) 推荐(0)
摘要:LCA的模板题,以代码为主 阅读全文
posted @ 2019-03-09 13:49 AD_shl 阅读(178) 评论(0) 推荐(0)