洛谷P5002 专心OI - 找祖先
题目概括
题目描述
这个游戏会给出你一棵树,这棵树有\(N\)个节点,根结点是\(R\),系统会选中\(M\)个点\(P_1,P_2...P_M\).
要Imakf回答有多少组点对\((u_i,v_i)\)的最近公共祖先是\(P_i\)。
Imakf是个小蒟蒻,他就算学了LCA也做不出,于是只好求助您了。
Imakf毕竟学过一点OI,所以他允许您把答案模 \((10^9+7)\)
输入输出格式
输入格式
第一行 \(N , R , M\) 此后\(N-1\)行 每行两个数\(a,b\) 表示\(a,b\)之间有一条边 此后\(1\)行 \(M\)个数 表示\(P_i\)
输出格式
\(M\)行,每行一个数,第\(i\)行的数表示有多少组点对\((u_i,v_i)\)的最近公共祖先是\(P_i\)
输入输出样例
输入样例 #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
(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)
\]
共31组
询问2
(4,2) (4,5) \\\\
(5,2) (5,4)
\]
共7组
对于询问3
\]
共1组
\]
解题报告
题意理解
就是问你有多少个数对,以\(P_i\)为最近公共祖先.
然后有\(m\)次查询
算法解析
这道题目,其实只考到了\(Lca\)概念,然后就没有然后了.
\]
我们分析一下,满足条件的数对,有哪些特性.
\((a,b)\)不同属于x一个子节点的子树,反例如下
\((a,b)\)必须都属于x的子树.反例如下
\((a,b)\)分别属于,\(x\)不同的儿子的子树节点.正确如下所示
\((a,b)\)之中有一个是\(x\),另外一个是\(x\)的子树节点
\((a,b)\)都是\(x\).懒得画图了
因此,我们总结得出以上规律.
然后如何统计个数呢.
\]
然后我们开始分类讨论.
- \((a,b)\)都是\(x\)子树节点.
\]
然后重复计算了\(a=b\)的情况.
\]
于是最后要记得减去.
- \((a,b)\)中有节点是\(x\)
于是我们很容易得出.
\]
综上所述,我们得出答案为.
\]
代码解析
#include <bits/stdc++.h>
using namespace std;
const int N=10000+20,Mod=1e9+7;
int n,r,m,size[N],root;
long long ans[N],sum[N];
vector<int> g[N];
inline void dfs(int x,int fa)
{
size[x]=1;
for(int y:g[x])
{
if (y==fa)
continue;
dfs(y,x);
size[x]+=size[y];
sum[x]+=size[y]*size[y];
sum[x]%=Mod;
}
ans[x]=(size[x]*size[x]-sum[x])%Mod;
}
inline void init()
{
scanf("%d%d%d",&n,&r,&m);
for(int i=1; i<n; i++)
{
int a,b;
scanf("%d%d",&a,&b);
g[a].push_back(b);
g[b].push_back(a);
}
dfs(r,r);
while(m--)
{
int x;
scanf("%d",&x);
printf("%lld\n",ans[x]);
}
}
signed main()
{
init();
return 0;
}
洛谷P5002 专心OI - 找祖先的更多相关文章
- P5002 专心OI - 找祖先
P5002 专心OI - 找祖先 给定一棵有根树(\(n \leq 10000\)),\(M \leq 50000\) 次询问, 求以 \(x\) 为 \(LCA\) 的点对个数 错误日志: 看下面 ...
- luogu P5002 专心OI - 找祖先
题目描述 这个游戏会给出你一棵树,这棵树有NN个节点,根结点是RR,系统会选中MM个点P_1,P_2...P_MP 1 ,P 2 ...P M ,要Imakf回答有多少组点对(u_i,v_ ...
- 【洛谷 5002】专心OI - 找祖先 (树上计数)
专心OI - 找祖先 题目背景 \(Imakf\)是一个小蒟蒻,他最近刚学了\(LCA\),他在手机\(APP\)里看到一个游戏也叫做\(LCA\)就下载了下来. 题目描述 这个游戏会给出你一棵树,这 ...
- [luogu5002]专心OI - 找祖先
[传送门] 我们还是先将一下算法的步骤,待会再解释起来方便一点. 算法步骤 首先我们算出每个子树的\(size\). 我们就设当前访问的节点 然后我们就得到了当前这个节点的答案是这个树整个的\(siz ...
- 【BZOJ4566_洛谷3181】[HAOI2016]找相同字符(SAM)
自己yy的方法yyyyyyyy着就A了,写篇博客庆祝一下. 题目: 洛谷3181 分析: SAM(可能是)模板题(不会SAM的同学戳我:[知识总结]后缀自动机的构建). 对\(s1\)建出SAM,用\ ...
- 【洛谷P3398】仓鼠找sugar
画个图就能多少看出些规律 证明借鉴一下大牛的题解: 设从A到B,经过的深度最小的点为X 同理,C,D的为Y 题目是一个点从A出发到B 一个从C出发到D 那么从A到B可以分解成 先从A到X 再从X到B. ...
- 洛谷 P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- 洛谷P3092 [USACO13NOV]没有找零No Change
P3092 [USACO13NOV]没有找零No Change 题目描述 Farmer John is at the market to purchase supplies for his farm. ...
- 【洛谷P3901】数列找不同
题目大意:给定一个长度为 N 的序列,每个点被染了一个颜色.现有 M 个询问,每个询问查询区间 [l,r] 内的点是否颜色都是不同的. 题解:莫队裸题. 直接维护区间颜色数,用 cnt[] 记录下区间 ...
随机推荐
- tp5博客项目实战1
tp5博客项目实战 开发准备:环境wamp,windows系统为例.看实战博客,默认会搭建开发环境并且tp5框架已经至少有一定的基础. tp5的下载与安装 方法一:直接在官网下载拷贝到wamp你的项目 ...
- charles 批量重复请求/重复发包工具
本文参考:charles 批量请求 重复发包工具/repeat Charles 让你选择一个请求并重复,在测试后端接口的时候非常有用: Charles将请求重新发送到服务器,并将响应显示为新请求. 如 ...
- 學校 iPad 使用學校google帳號登入Google Drive 提示"裝置政策提醒"的解決方法
因爲學校iPad 是給學生和老師使用,大多數是不需要設置鎖屏密碼的,然後 Gsuite 默認是開啓 “行動管理服務” 的策略為基本,就是需要設備設置鎖屏密碼以保障資料安全,不那麽容易被竊取. 然後就出 ...
- Egret入门学习日记 --- 第十三篇(书中 5.2~5.3节 内容)
第十三篇(书中 5.2~5.3节 内容) 写日记已经十天多了,我发现越到后面,我书写的方式越来越程序化. 感觉渐渐失去了人类所谓的感情似的. 不过,没想到的是,书中的内容,很少出现了错误,我一路过来到 ...
- 【ARM-Linux开发】Wi-Fi 应用工具wpa_supplicant
wpa_supplicant是一个跨平台的无线安全管理软件,这里需要用它来对无线网络进行配置,wpa_supplicant相关工具已经移植好,包含在我们提供的文件系统中. 配置无线网络 wpa_sup ...
- 学习笔记:oracle之win10安装卸载oracle 11gR2步骤及常见问题解决
1.win10下安装oracle11g 1.1 工具原料 oracle11g安装包(64位) 1.2 步骤方法 1.在Oracle官网下载安装包,下载后,得到的文件如图所示: 2.将两个文件进行解压缩 ...
- 【基本优化实践】【1.6】在sql server修改且移动数据库文件位置
在master数据库中,SQL Server提供系统扩展的存储过程,其中有一些存储过程的命名以xp_开头,用于处理操作系统的文件. 一,判断文件是否存在 存储过程sys.xp_fileexist 用于 ...
- Jetbrains系列产品2019.2.3最新激活方法
Jetbrains系列产品2019.2.3最新激活方法[持续更新] 发表于 2018-08-25 | 分类于 软件调试 本站惯例:本文假定你知道Jetbrains家的产品.不知道可以问问搜索引擎. 大 ...
- Linux下PHP7.2扩展
前言 由于公司某项目需要连接oracle数据库,该项目使用的开发语言为PHP,故需要对PHP进行扩展 环境说明 服务器:Centos7 PHP:7.2, 源码安装;安装路径:/usr/local/xx ...
- 微信小程序页面滚动到指定位置
页面上有一个元素或者组件,id 为 comment 则: var me = this; var query = wx.createSelectorQuery().in(me); query.selec ...