hihoCoder 1167高等理论计算机科学(LCA,没有完全理解,先放着)
2015-05-09 13:27
295 查看
clj在某场hihoCoder比赛中的一道题,表示clj的数学题实在6,这道图论貌似还算可以。。。
题目链接:http://hihocoder.com/problemset/problem/1167
由于是中文题目,题意不再赘述。
对于任意两条小精灵的活动路径a和b,二者相交的判断条件为b的两个端点的LCA在a的路径上;那么我们可以首先将每个活动路径端点的LCA离线预处理出来,对每个节点LCA值+1。
然后以某个节点(我选择的是节点1)为根进行深搜,算出一条从节点1到节点x的LCA值和,那么任意路径a(假设其两端点分别是A和B)上的节点个数就是sum[A] + sum[B] - 2 * sum[LCA(A,B)]。
最后,对于某些点,如果它是不止一条路径的LCA,那么我们只需要对最终答案乘以C(LCAnum, 2)的组合数就好。
【PS:clj给出的题解中,采用了点分治+LCA的方式,虽然看懂了题意,但是表示对递归分治之后的路径,如何求出其上的LCAnum,并没有多好的想法,还望巨巨能指点一下,Thx~】
AC代码:
题目链接:http://hihocoder.com/problemset/problem/1167
由于是中文题目,题意不再赘述。
对于任意两条小精灵的活动路径a和b,二者相交的判断条件为b的两个端点的LCA在a的路径上;那么我们可以首先将每个活动路径端点的LCA离线预处理出来,对每个节点LCA值+1。
然后以某个节点(我选择的是节点1)为根进行深搜,算出一条从节点1到节点x的LCA值和,那么任意路径a(假设其两端点分别是A和B)上的节点个数就是sum[A] + sum[B] - 2 * sum[LCA(A,B)]。
最后,对于某些点,如果它是不止一条路径的LCA,那么我们只需要对最终答案乘以C(LCAnum, 2)的组合数就好。
【PS:clj给出的题解中,采用了点分治+LCA的方式,虽然看懂了题意,但是表示对递归分治之后的路径,如何求出其上的LCAnum,并没有多好的想法,还望巨巨能指点一下,Thx~】
AC代码:
相关文章推荐
- hihoCoder 1167高等理论计算机科学(LCA)
- hihoCoder 1167高等理论计算机科学(LCA)
- hihoCoder挑战赛11.题目4 : 高等理论计算机科学(LCA)
- 【Hihocoder 1167】 高等理论计算机科学 (树链的交,线段树或树状数组维护区间和)
- == 理论计算机科学学习网站 ==
- 不要去忽视计算机科学的理论
- SCI收录的计算机科学 - 理论与方法类 - 期刊目录
- 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机科学理论
- 不要以为写写代码就是计算机科学 重拾你理解偏颇的计算机科学(转)
- 计算机科学基础理论的威力
- 计算机科学基础知识(六)理解栈帧
- 计算机科学数学理论浅谈
- 【概念理论】当年中二,零碎概念不完全理解
- 计算机科学数学理论浅谈 (转载)
- 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机科学理论
- 【Algorithms】理论计算机科学 & P vs NP - 问题概述
- 计算机科学的理论基础
- 以形而上学的概念理解计算机科学
- 计算机科学数学理论浅谈[转载]
- 【转】十大30秒内即可理解的科学理论