LCA
文章平均质量分 79
霜刃未曾试
这个作者很懒,什么都没留下…
展开
-
SPOJ QTREE2 Query on a tree II 倍增lca
题目:https://vjudge.net/problem/SPOJ-QTREE2题意:给定一个树,有边权,有以下操作: DIST a b:DIST\ a\ b:求aa到bb的距离 KTH a b k:KTH\ a\ b\ k:求从aa到bb路径上的第kk个节点,aa是第一个 以DONEDONE作为查询结束标志思路:第一个操作,任意一个lcalca算法都可以求出来,考虑第二种操作,最简单的方法是一步原创 2017-09-12 10:54:48 · 312 阅读 · 0 评论 -
HDU 6115 Factory LCA求树上距离
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6115题意:Problem Description 我们将A省简化为由N个城市组成,某些城市之间存在双向道路,而且A省的交通有一个特点就是任意两个城市之间都能通过道路相互到达,且在不重复经过城市的情况下任意两个城市之间的到达方案都是唯一的。聪明的你一定已经发现,这些城市构成了树这样一个结构。现在百度陆续开了原创 2017-08-14 19:35:21 · 556 阅读 · 0 评论 -
HDU 3078 Network LCA + 排序
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3078 题意:给定一棵树,树上每个点都有权值,有两种操作: k a b,k == 0时把a点的权值改为b,k > 0时求a到b路径上第k大的权值 思路:k == 0时直接改权值即可,求k大值时求出a到b的LCA,然后分别从a和b出发走到LCA,记录下路径上的权值,排序输出第k大即可 总结:数据很菜,这原创 2016-10-02 17:10:45 · 695 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors 倍增法求LCA
题目:http://poj.org/problem?id=1330 题意:给定一个有向树,求树中两点的LCA 思路:倍增法,留个模板。这个讲的不错点这里 #include #include #include #include #include using namespace std; const int N = 10010; const int INF = 0x3f3f3f3f;原创 2016-08-16 11:17:05 · 857 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors 在线LCA
题目:http://poj.org/problem?id=1330 题意:给定一棵树,求两点的最近公共祖先 思路:刚学在线LCA,练练手 #include #include #include #include #include #include using namespace std; const int N = 10010; struct edge { int to,原创 2016-07-22 16:07:54 · 296 阅读 · 0 评论 -
POJ 3694 Network 双联通分量 + lca
题目:http://poj.org/problem?id=3694 题意:给定一个连通图,现有q个操作,每个操作连接两个点,求每次操作后图中有多少桥 思路:每次操作后用tarjan求桥肯定会T的,可以先求桥并标记,把边双连通分量缩点,缩成一棵树,然后对于每个查询,直接去找它们的lca,并把经过路径的桥去掉标记,因为路径上的桥都变成了圈的一部分,不再是桥了。不过做得时候不一定需要原创 2016-05-08 17:39:51 · 782 阅读 · 0 评论 -
ZOJ 3195 Design the city LCA
题目:http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3195 题意:给定一个树,求三点之间的距离 思路:假定三点为u, v, w,那么(dist[u,v] + dist[v,w] + dist[u,w]) / 2就是答案 总结:wa时不要灰心,也许你离ac不远了 #include #includ原创 2016-05-07 00:35:40 · 3694 阅读 · 0 评论 -
POJ 1470 Closest Common Ancestors tarjan算法求LCA
题目:http://poj.org/problem?id=1470 题意:输入一个n,代表树有n个点,从1到n。接下来n行,每行第一个数为树上的点,然后一个数,假设是m吧,其后跟m个数,代表之前的点指向这m个点。然后有大于等于1组的查询,查询它们的LCA,最后输出每个点作为LCA的次数,为0的不输出。 思路:LCA模板题啦,求LCA时直接统计一下就好了,输入有点小恶心 #in原创 2016-05-05 15:15:51 · 1023 阅读 · 0 评论 -
HDU 2586 How far away ? tarjan算法求LCA
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:有n个顶点,n - 1条双向边构成树,每条边都有权值,有m个查询,求每个查询两点之间的最小权值 思路:很久很久以前学最短路时用dijkstra把这题过了。。。用LCA求的话,求出从根节点到每个点之间的权值和,用dist[i]表示,那么对于查询(v, u)就有 dist[v,原创 2016-05-05 16:28:18 · 818 阅读 · 1 评论 -
POJ 1330 Nearest Common Ancestors LCA
题目:http://poj.org/problem?id=1330 题意:一棵n个点的数,输入n - 1条边,最后输入一组查询,求它们的最近公共祖先 思路:tarjan算法求LCA第一题,模板题。学习tarjan算法求LCA过程中参考了以下巨巨的博客:http://noalgo.info/476.html,http://blog.csdn.net/jarily/article/原创 2016-05-05 14:40:24 · 465 阅读 · 0 评论 -
POJ 1986 Distance Queries tarjan求LCA
题目:http://poj.org/problem?id=1986 题意:给定一个树,求树上两点间的最短距离 思路;tarjan求LCA,然后dist[v,u] = dist[v] + dist[u] - 2 * dist[LCA(v,u)] 总结:不知输入数据里的字母是什么鬼。。。 #include #include #include #include using原创 2016-05-05 22:38:28 · 370 阅读 · 0 评论 -
HDU 2874 Connections between cities LCA
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意:给定一个图,不一定连通,求任意两点间的最短距离,不能相互到达就输出Not connected 思路:tarjan求LCA,然后dist[v,u] = dist[v] + dist[u] - 2 * dist[LCA(v, u)] 总结:题目不难,但是对内存限制好严原创 2016-05-05 22:32:09 · 415 阅读 · 0 评论 -
hdu 6031 Innumerable Ancestors lca + 二分
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6031题意:给定一个无向树形图,1为根,对于每次查询,给出两个集合,问两个集合中各选出一个点的最近公共祖先的深度最深为多少思路:用倍增求lca,然后二分枚举答案,求出第一个集合中的点在枚举的深度上的祖先,并标记这些祖先,然后求第二个集合中的点在枚举的深度上的祖先,检查两个集合在枚举深度上的祖先有没有重合,有重原创 2017-10-16 16:04:04 · 382 阅读 · 0 评论