今天说是要练习LCA结果找了道题看着题解打完了,如此惭愧,Lca还得好好理解啊,感觉在最大生成树上做有点异样,可能还是不是很理解吧,在noip前一定要再把这道题再a一遍,好题啊。 这是2013noipt3的题,难度适中,比以往的简单没让人想不出来思路虽然我第一遍看也没想起来但是题解易懂,是我这种低级
转载
2018-09-23 17:44:00
75阅读
2评论
LCA的类型多种多样,只说我知道的,就有倍增求LCA,tarjin求LCA和树链剖分求LCA,当然,也还有很多其他的方法。 其中最常用,速度最快的莫过于树链剖分的LCA了。 树链剖分,首先字面理解一下,什么是树链剖分。 就是把一棵树剖分为若干条链,然后利用数据结构(树状数组,SBT,Splay,线段
转载
2018-04-15 11:09:00
100阅读
点赞
2评论
LCA(Lowest Common Ancestor 最近公共祖先)定义如下:在一棵树中两个节点的LCA为这两个节点所有的公共祖先中深度最大的节点。 比如这棵树 结点5和6的LCA是2,12和7的LCA是1,8和14的LCA是4。 这里讲一下用树链剖分来求LCA。 先想一下,若要求结点13和4的LC
原创
2021-05-29 18:32:35
742阅读
Dylans loves tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 747 Accepted Submission(s):
转载
2017-06-16 20:08:00
83阅读
2评论
树的直径和LCA图中所有最短路径的最大值即为「直径」,可以用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径。
方法1 首先对任意一个结点做 DFS 求出最远的结点,然后以这个结点为根结点再做 DFS 到达另一个最远结点。第一次 DFS 到达的结点可以证明一定是这个图的直径的一端,第二次 DFS 就会达到另一端。下面来证明这个定理。两次DFS的方法不适用于有负权边的树。cons
原创
2022-01-20 11:56:22
180阅读
树的直径和LCA图中所有最短路径的最大值即为「直径」,可以用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径。方法1 首先对任意一个结点做 DFS 求出最远的结点,然后以这个结点为根
原创
2021-11-20 09:20:29
134阅读
题目链接:http://acm.hdu.e
#pragma comment(linke
原创
2023-05-29 18:22:15
66阅读
题目:思路:我们可以暴力枚举其中一条路径,那...
转载
2019-11-12 14:53:00
39阅读
2评论
题目大意:给出N个点,M条边,每条边有相应的危险系数
现在有Q个询问,每次询问的是两点之间的路径中的最高危险系数是多少,最高危险系数要最小解题思路:要求的是瓶颈路。按照prim算法求
原创
2023-04-07 10:55:33
32阅读
漂亮的公园(树剖LCA)传送门思路:树剖LCALCALCA。一个结论:距离某个点集SSS最大的点vvv,一定是距离点集SSS中相距最大的两个x,yx,yx,y的距离最大。即maxdis(nodeS,v)=max(dis(x,v),dis(y,v))。[dis(x,y)≥dis(u,v),∀u,v∈S]max_{dis}(node_{S},v)=max(dis(x,v),dis(y,v))。[dis(x,y)\geq dis(u,v),\forall u,v\in S]maxdis(nodeS,v
原创
2022-01-22 14:12:05
22阅读
描述给你一个图,一共有N个点,2*N-2条有向边。 边目录按两部分给出1、 开始的n-1条边描述了
原创
2022-07-05 10:34:20
79阅读
漂亮的公园(树剖LCA)传送门思路:树剖LCALCALCA。一个结论:距离某个点集SSS最大的点vvv,一定是距离点集SSS中相距最大的两个x,yx,yx,y的距离最大。即maxdis(nodeS,v)=max(dis(x,v),dis(y,v))。[dis(x,y)≥dis(u,v),∀u,v∈S]max_{dis}(node_{S},v)=max(dis(x,v),dis(y,v))。[dis(x,y)\geq dis(u,v),\forall u,v\in S]maxdis(nodeS,v
原创
2021-08-10 10:12:20
46阅读
给你一棵树,每次规定两个子树不能到,问你树上的最长路径长度。 ...
转载
2021-08-24 09:48:00
42阅读
2评论
3730: 震波Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 1202 Solved: 288[Submi
原创
2023-07-07 13:06:38
23阅读
有定理存在次小生成树,只替换最小生成树的一条边得来。那么先跑一遍最小生成树然后枚举不在树边的边(u,v)(u,v)(u,v)假如加入这条边,树就会成环,我们需要删掉u−>vu->vu−>v的一条树边显然删掉最大的那条边最优秀这个过程使用LCALCALCA来优化严格次小生成树模板题#include <bits/stdc++.h>using namespace std;#define int long longconst int maxn=2e5+10; c
原创
2021-08-27 10:01:58
114阅读
题目大意:给出N个点。M条边。问这N个点形成的生成树的最大权值边-最小权值边的最小值 解题思路:先排序,然后按生成树的kruscal算法进行加边,再维护一个最小权值边 加边的时候要考虑一下加下去的边是否会形成环,假设形成环的话,就把环内的最小边去掉,然后再找出这棵新的生成树的最小边 等到生成树形成的
转载
2017-07-11 11:16:00
56阅读
2评论
题目大意:给出N个点,M条边,问这N个点形成的生成树的最大权值边-最小权值边的最小值解题思路:先排序,然后按生成
原创
2023-04-07 10:55:55
51阅读
补了一发LCA,表示这东西表面上好像简单,但是细节真挺多。 我学的是树上倍增,倍增思想很有趣~~(爸爸的爸爸叫奶奶.偶不,爷爷)有一个跟st表非常类似的东西,f[i][j]表示j的第2^i的祖先,就是说f[0][x]是父亲,f[1][x]是爷爷,f[2][x]是高祖父(爷爷的爷爷),f[3][x]是
转载
2017-09-26 20:39:00
90阅读
2评论
有定理存在次小生成树,只替换最小生成树的一条边得来。那么先跑一遍最小生成树然后枚举不在树边的边(u,v)(u,v)(u,v)假如加入这条边,树就会成
原创
2022-02-10 10:20:27
568阅读