LCA
HonniLin
double fighting
展开
-
POJ 1986 - Distance Queries(LCA‘ 在线算法RMQ)
题目:http://poj.org/problem?id=1986题意:N个节点M条边的一棵树,M条边的信息,K个询问,求出两个端点之间的距离。思路:LCA的在线算法RMQ。该算法详细解析见http://blog.csdn.net/y990041769/article/details/40887469AC.#include #include #include #inclu原创 2015-07-10 17:30:46 · 775 阅读 · 0 评论 -
HDU 2874 - Connections between cities(LCA‘离线算法Tarjan)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2874题意:n个点m条边的森林,c个询问,求出两个点的最短路径,若不连接则输出 Not connected。思路:由于询问c(1~1000000),所以采用LCA的离线算法由于是森林,则再建立一个点n+1将所以点连接起来,若两个点的最近公共祖先是n+1,则两个点 Not connected。原创 2015-07-11 09:51:52 · 615 阅读 · 0 评论 -
ZOJ 3195 - Design the city(LCA'离线算法Tarjan)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3320题意:n个点,n-1条边,给出边的端点及权值,Q个询问,三个点的最短距离。思路:由于n(1~50000),Q(1~700000), 所以采用离线算法Tarjan,O(n+Q), 三个点的最短距离是两点之间的最短距离相加除以2,所以将两个点的最近公共祖先原创 2015-07-11 17:10:37 · 719 阅读 · 0 评论 -
HDU 3078 - Network(LCA'ST算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3078题意:n个点,每个点都有权值,n-1条边,q个询问,k=0是将点a的权值改为b,k>0时求出点a到b路径中第k大的权值。思路:预处理的dfs中 使用pre数组记录每个点的前驱。求出a,b 的最近公共祖先lca,记录路径,将路径的点的权值排序,输出第k大的点值。AC.#include原创 2015-07-11 21:49:46 · 620 阅读 · 0 评论 -
*POJ 3728 - The merchant(LCA‘ Tarjan)
题目:http://poj.org/problem?id=3728题意:n个点,每个点都有相应的货物价格,n-1条边。Q个询问,给出起点u终点v,在u到v 的路径上,最多做买卖一次,求出最大的获利数。(可以不做买卖)。思路:LCA的离线算法。根据题目分析:假设(u,v)的最近公共祖先是lca,答案可能在路径(u,lca),用数组up【u】记录从u到lca的最大获利数原创 2015-07-29 15:46:27 · 673 阅读 · 0 评论 -
*POJ 3417 - Network(LCA + 树形DP)
题目:http://poj.org/problem?id=3417题意:给出一棵有n个节点的树,新加入m条边,求出断开一条旧边和一条心边,使得图变成两个连通块的方案数。思路:(摘抄)我们知道,这m条边连上后这颗树必将成环,假设新边为(u,v),那么环为u---->LCA(u,v)------->v-------->u,我们给这个环上的边计数1,表示这些边被一个环原创 2015-07-30 09:49:18 · 510 阅读 · 0 评论 -
HDU 3830 - Checkers(二分LCA)****
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3830题意:给出直线上三个点的初始位置,和最终位置,每次可以选择一个点经过另一个点等间隔跳跃,但是不能经过两个点。求出是否能从初始状态到达最终状态。能的话输出最小步数。思路:将一个状态作为一个点,建二叉树。其根为状态能到达的三点等距的状态。若题目给出的初始位置和最终位置都能到达同一个原创 2015-09-30 15:07:34 · 726 阅读 · 0 评论 -
***HDU 4429 - Split the Rectangle(LCA'暴力求解)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4429题意:一个大矩阵中有m条水平或竖直直线,将其分成m+1个小矩阵。有q个询问,输入两个点,要使得两个点在同一个矩阵,可以拿掉一些边,但是拿掉边之后要使得两个矩阵能合成一个矩阵。求出最后剩下的最多的矩阵数量。思路:将图转化成树。大矩阵为根,一条直线分割矩阵,一个矩阵变成根的左儿子,原创 2015-09-17 23:37:13 · 735 阅读 · 0 评论 -
HDU 4409 - Family Name List(模拟树+lca)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4409思路:模拟输出树,暴力求解LCAAC.#include #include #include #include #include #include #include using namespace std;const int maxn = 30005;char s原创 2015-10-10 18:09:32 · 456 阅读 · 0 评论