
最小公共祖先
Rem_Inory
这个作者很懒,什么都没留下…
展开
-
【题解】洛谷P2420 让我们异或吧(LCA 倍增)
根节点不需要思考 直接初始化为1即可开一个yh数组记录异或值,在倍增的同时将答案不断与其异或即可。其他的也没啥好说的 就是个普通的倍增#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cstdlib>usin...原创 2018-08-10 15:16:40 · 257 阅读 · 0 评论 -
【题解】洛谷P1351 联合权值(dfs、LCA)
这道题一开始啥也没想就用最短路写,才40分,然后发现自己对寻找最大值取模了,改了之后60分。。然后又发现n个点,n-1条边,其实这个图就是一棵树,每一个点到其余点的最短路有且只有一条,完全可以用dfs对每个点进行扩展,扩展两层找到点然后进行操作。。虽然看起来更简便了,但还是60分,所以我们得想更好的方法。为啥它让你找距离为2的点而不是距离为3、4……的点呢?我们可以发现,对于一个中心结点,它的...原创 2018-08-07 17:57:15 · 332 阅读 · 0 评论 -
【题解】洛谷P3379 最近公共祖先(模板)
暴力70分思路:记录下每个点深度与其父亲节点,对于要查询的深度较深的点一直往上跳,跳到与另一个要查询的点深度相同为止。然后两个结点一起往上跳,直到两个结点相遇,输出答案。思路是正确的,但每一次只能跳一步,在很深的树操作难免会超时,这里我们使用倍增来解决这一问题。我们知道用1,2,4,8,16,……2^i这些数可以凑出任何一个数(不知道为什么看看它们的二进制,然后你就明白了),所以我们每次可...原创 2018-08-08 16:25:51 · 331 阅读 · 0 评论 -
【题解】洛谷P1967 货车运输(最大生成树 倍增)
前排提醒,对于倍增数组可以开大。。但千万不能开小,否则结果一定不对。。在这里卡了2h。。。可以发现有一些权值较小的边是不会被走过的。正如样例中的第三条边,就算有其他的很多条边,这条边无论如何也是不会被走过的。于是我们想到了可以将图中这样的边去掉,按照这个思路我们便想到了构造最大生成树,将其余的边去除。得到了这样一个树之后,我们便考虑如何求出两个节点之间最小边权的最大值(即为题中的最大载重)...原创 2018-08-08 20:18:46 · 323 阅读 · 0 评论