[luogu5002]专心OI - 找祖先】的更多相关文章

[传送门] 我们还是先将一下算法的步骤,待会再解释起来方便一点. 算法步骤 首先我们算出每个子树的\(size\). 我们就设当前访问的节点 然后我们就得到了当前这个节点的答案是这个树整个的\(size\)的两倍\(-1\),再加上两两子树的\(size\)的积. 也就是$ans=size[u] \times 2 - 1 +\sum size[i] * size[j] $ 其中\(i\)和\(j\)是u的儿子. 一下就是核心代码: register LL ans = sz[p] * 2 - 1;…
P5002 专心OI - 找祖先 给定一棵有根树(\(n \leq 10000\)),\(M \leq 50000\) 次询问, 求以 \(x\) 为 \(LCA\) 的点对个数 错误日志: 看下面 Solution 设点 \(u\) 的子树大小为 \(size[u]\) 现询问以 \(u\) 为 \(LCA\) 的点对个数 设 \(u\) 的子节点为 \(v_{1}, v_{2},...,v_{m}\) 我们现在统计点对中一个点在 \(v_{1}\) 内的答案数 一个点在 \(v_{1}\)…
专心OI - 找祖先 题目背景 \(Imakf\)是一个小蒟蒻,他最近刚学了\(LCA\),他在手机\(APP\)里看到一个游戏也叫做\(LCA\)就下载了下来. 题目描述 这个游戏会给出你一棵树,这棵树有\(N\)个节点,根结点是\(R\),系统会选中\(M\)个点\(P_1,P_2...P_M\),要\(Imakf\)回答有多少组点对\((u_i,v_i)\)的最近公共祖先是\(P_i\).\(Imakf\)是个小蒟蒻,他就算学了\(LCA\)也做不出,于是只好求助您了. \(Imakf\)…
题目概括 题目描述 这个游戏会给出你一棵树,这棵树有\(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\) 表示\(…
题目描述 这个游戏会给出你一棵树,这棵树有NN个节点,根结点是RR,系统会选中MM个点P_1,P_2...P_MP 1 ​ ,P 2 ​ ...P M ​ ,要Imakf回答有多少组点对(u_i,v_i)(u i ​ ,v i ​ )的最近公共祖先是P_iP i ​ .Imakf是个小蒟蒻,他就算学了LCA也做不出,于是只好求助您了. Imakf毕竟学过一点OI,所以他允许您把答案模 (10^9+7)(10 9 +7) 输入格式 第一行 N , R , MN,R,M 此后N-1N−1行 每行两个…
题目链接 https://www.luogu.org/problem/P5004 洛谷 P5004 专心OI - 跳房子 Imakf有一天参加了PINO 2017 PJ组,他突然看见最后一道题 他十分蒟蒻,写不出来 而如今他还是一个蒟蒻,他又看见一道题 他还是写不出来,于是便来请教您 题目描述 您有NN个格子,排成一行,从左往右编号为1,2,...,N1,2,...,N.您站在11号格子的左边,开始从左往右跳,跳到NN号格子右侧为止.由于您是一位成功的OIerOIer,您自然长得很胖,但您的力量…
Box Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2374    Accepted Submission(s): 718 Problem Description There are N boxes on the ground, which are labeled by numbers from 1 to N. The boxes…
传送门:https://www.luogu.org/problemnew/show/P5004 分析 动态规划转移方程是这样的\(f[i]=\sum^{i-m-1}_{j=0}f[j]\). 那么很明显的是要构造举证,而且要维护前缀和,所以需要保留\(m+1\)项. ac代码 #include <bits/stdc++.h> #define ll long long #define ms(a, b) memset(a, b, sizeof(a)) #define inf 0x3f3f3f3f…
首先这是一道计数类DP,那我们得先推式子,经过瞎掰乱凑,经过认真分析,我们可以得到这样的方程 F(N)=F(0)+F(1)+....+F(N-M-1) 所有F初值为1,F(1)=2 ANS=F(N+M); 那显然我们有这样的代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ; using namespace std; inline int read(){…
题面 把\(N\)个无色格子排成一行,选若干个格子染成黑色,要求每个黑色格子之间至少间隔\(M\)个格子,求方案数 思路: 矩阵加速 根据题面,这一题似乎可以用递推 设第\(i\)个格子的编号为\(i\),有\(i\)个格子时的方案数为\(f(i)\) 显然,当 \(i \le M+1\) 时, 可以所有格子不染色(方案数为\(1\)种,或者最多有一个格子染色(方案数为\(i\)种) 所以有\(f(i)=i+1\) 当\(i>M+1\)时, 对于第\(i\)个格子可以由第\(i-1\)个格子转移…