LCA
Self-Discipline
在校大学生
展开
-
poj1330 Nearest Common Ancestors(最近公共祖先)
传送门:点击打开链接 题意:最近公共祖先的裸题。 分析:最近公共祖先其实用的不多,为了以防万一,还是准备个模板。常用的求LCA的算法有:Tarjan/DFS+ST/倍增,我这里用的是Tarjan。Tarjan算法的优点在于相对稳定,时间复杂度也比较居中,也很容易理解。如果有并查集的基础,Tarjan就很容易理解了。 代码: #include<iostream> #includ...原创 2018-05-02 15:32:22 · 236 阅读 · 0 评论 -
牛客国庆集训派对Day6 J-最短路
题目:点击打开链接 题意:略。 分析:(lca+100次最短路)先把题目给的边存起来,先取n-1个边(不能有环)构成生成树,然后求lca,对于漏掉的边u<-->v,假设x到y的最短路不走这条边,那么其最短路有可能是lca的距离,假设走这条边,必走u,那么我先求出起点为u到所有点的最短路,x到y的距离就是min(lca , d[u][x]+d[u][y])。(不明白的可以画个草图)由于边...原创 2018-10-17 22:22:14 · 241 阅读 · 0 评论 -
倍增法实现LCA(以HDU - 2586为例)
题目:点击打开链接 题意:求树上任意两点之间的距离。 分析:LCA模板题,这是一棵无根树,把它转化为有根树,再用倍增LCA求出每个结点到根节点的距离,两点的距离:dist = dis[u] + dis[v] - 2 * dis[ LCA(u,v) ],复杂度O(nlogn)。倍增法求LCA入门参考https://blog.csdn.net/lw277232240/article/details/7...原创 2018-10-17 19:49:05 · 358 阅读 · 0 评论 -
UVA-11354
题意:最小瓶颈路,给出一张n个点m条边的无向图, 每条边有一个危险度,有q个询问, 每次给出两个点s、t,找一条路, 使得路径上的最大危险度最小。 思路一:并查集(按秩合并),求一个最小生成树, 任意两点在生成树上有唯一路径, 而且这条路径上的最大危险值一定最小。 但是n和q都太大, 如果直接顺着树走,每次询问最大复杂度O(n), 那么复杂度高达O(n^2),会超时。 并查集在用了路径压缩之后效...原创 2019-05-31 08:46:30 · 387 阅读 · 0 评论