Luogu P5002 专心OI - 找祖先

博客介绍了Luogu P5002问题,该问题涉及在给定树结构中找到最近公共祖先(LCA)。文章讨论了如何计算以特定点Pi为根的树中,有多少对点的LCA是Pi,提出了O(n^2)的解决方案,并指出实际存在O(max(n, m))的高效算法。" 106578198,9636064,EF框架分页查询实现,"['ORM', 'Entity Framework', '数据库', '分页']
摘要由CSDN通过智能技术生成

专心OI - 找祖先

题目背景

Imakf 是一个小蒟蒻,他最近刚学了 LCA,他在手机 APPstore 里看到一个游戏也叫做 LCA 就下载了下来。

题目描述

这个游戏会给出你一棵树,这棵树有 N N N 个节点,根结点是 R R R ,系统会选中 M M M 个点 P 1 , P 2 . . . P M P_1,P_2...P_M P1,P2...PM ,要Imakf 回答有多少组点对 ( u i , v i ) (u_i,v_i) (ui,vi) 的最近公共祖先是 P i P_i Pi。Imakf 是个小蒟蒻,他就算学了 LCA 也做不出,于是只好求助您了。

Imakf 毕竟学过一点 OI,所以他要求您把答案模 ( 1 0 9 + 7 ) (10^9+7) (109+7)

输入格式

第一行三个整数 N , R , M N , R , M N,R,M

此后 N − 1 N-1 N1 行,每行两个数 a , b a,b a,b,表示 a , b a,b a,b 之间有一条边。

此后 $1 $行,共 M M M 个数,表示 P i P_i Pi

保证给出的边形成一棵树。

输出格式

输出共 M M M 行,每行一个数,第 i i i 行的数表示有多少组点对 ( u i , v i ) (u_i,v_i) (ui,vi) 的最近公共祖先是 P i P_i Pi

样例 #1

样例输入 #1

7 1 3
1 2
1 3
2 4
2 5
3 6
3 7
1 2 4

样例输出 #1

31
7
1

提示

样例 1 的树如下图所示:

对于询问 1   ( 1 , 1 ) ( 1 , 2 ) ( 1 , 3 ) ( 1 , 4 ) ( 1 , 5 ) ( 1 , 6 ) ( 1 , 7 ) ( 2 , 1 ) ( 2 , 3 ) ( 2 , 6 ) ( 2 , 7 ) ( 3 , 1 ) ( 3 , 2 ) ( 3 , 4 ) ( 3 , 5 ) ( 4 , 1 ) ( 4 , 3 ) ( 4 , 6 ) ( 4 , 7 ) ( 5 , 1 ) ( 5 , 3 ) ( 5 , 6 ) ( 5 , 7 ) ( 6 , 1 ) ( 6 , 2 ) ( 6 , 4 ) ( 6 , 5 ) ( 7 , 1 ) ( 7 , 2 ) ( 7 , 4 ) ( 7 , 5 ) ~(1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (2,1) (2,3) (2,6) (2,7) (3,1) (3,2) (3,4) (3,5) (4,1) (4,3) (4,6) (4,7) (5,1) (5,3) (5,6) (5,7) (6,1) (6,2) (6,4) (6,5) (7,1) (7,2) (7,4) (7,5)  (1,1)(1,2)(1,3)(1,4)(1,5)(1,6)(1,7)(2,1)(2,3)(2,

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值