JZOJ4888【NOIP2016提高A组集训第14场11.12】最近公共祖先
来源:互联网 发布:三星刷windows phone 编辑:程序博客网 时间:2024/06/06 02:05
Description
YJC最近在学习树的有关知识。今天,他遇到了这么一个概念:最近公共祖先。对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。YJC很聪明,他很快就学会了如何求最近公共祖先。他现在想寻找最近公共祖先有什么性质,于是他提出了这样的一个问题:n层的满k叉树T,求对于每一对(i,j)(1≤i,j≤T的点数),LCA(T,i,j)的深度的和是多少。这个数字n层的满k叉树指一棵带标号的有根树,深度为i(
Solution
我们设f[i]表示i层k叉数的数量,则f[i]=ki−1k−1 那么我们发现ans=∑n−1i=0(f[n−i+1]2−k∗f[n−i]2)∗i∗ki ,代入得ans=∑n−1i=0(kn−i+1−1k−12−k∗kn−i−1k−12)∗i∗ki 化简一下就得到ans=∑n−1i=0i∗ki−i∗k2∗n−i+11−k ,ans=∑n−1i=0i∗ki−i∗k2∗n−i+11−k 我们知道∑n−1i=0i∗ki=n∗∑n−1i=0ki−∑ni=1∑i−1j=0kj ,我们将i∗k2∗n−i+1 视为i∗k2∗n+1∗(1k)i 所以将式子代入得k2n−k−(2n−1)kn(k−1)(k−1)3 。所以算法复杂度为O(logN ).
Code
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define ll long longusing namespace std;const ll maxn=1000005,mo=998244353;ll f[maxn],n,i,t,j,k,l,m,ans,x;ll sqr(ll x){ return x*x%mo;}int main(){ freopen("lca.in","r",stdin);freopen("lca.out","w",stdout); scanf("%lld%lld",&n,&k); f[1]=1;ans=0;n--; for (i=2;i<=n+1;i++) f[i]=(f[i-1]*k+1)%mo; x=1; for (i=0;i<=n;i++){ t=x*((sqr(f[n-i+1])-k*sqr(f[n-i])%mo+mo)%mo)%mo; ans=(ans+t*i%mo)%mo; x=x*k%mo; } printf("%lld\n",ans);}
1 0
- 【JZOJ4888】【NOIP2016提高A组集训第14场11.12】最近公共祖先
- JZOJ4888【NOIP2016提高A组集训第14场11.12】最近公共祖先
- 最近公共祖先 【NOIP2016提高A组集训第14场11.12】
- 【NOIP2016提高A组集训第14场11.12】最近公共祖先
- 【NOIP2016提高A组集训第14场11.12】最近公共祖先
- 4888. 【NOIP2016提高A组集训第14场11.12】最近公共祖先 (2017.10B组)
- 最长公共回文子序列 【NOIP2016提高A组集训第14场11.12】
- 【NOIP2016提高A组集训第14场11.12】最长公共回文子序列
- 【JZOJ4889】【NOIP2016提高A组集训第14场11.12】最长公共回文子序列
- NOIP2016提高A组集训第14场11.12 总结
- jzoj4888 最近公共祖先
- 【jzoj4888】【最近公共祖先】
- Jzoj4888 最近公共祖先
- 4890. 【NOIP2016提高A组集训第14场11.12】随机游走 (2017.10B组)
- 【NOIP2016提高A组集训第14场11.12】随机游走
- JZOJ4890. 【NOIP2016提高A组集训第14场11.12】随机游走
- 【JZOJ4890】【NOIP2016提高A组集训第14场11.12】随机游走
- jzoj 4890. 【NOIP2016提高A组集训第14场11.12】随机游走 树上期望dp
- makefile目标的规则
- git配置代理的方法
- Android Gradle Build Error:Some file crunching failed, see logs for details解决办法
- 【NOIP2016提高A组集训第14场11.12】最近公共祖先
- Jquery获得 selection的text 和 option值
- JZOJ4888【NOIP2016提高A组集训第14场11.12】最近公共祖先
- 第12周 项目4 - 利用遍历思想求解图问题 (1-5)
- [Tsinsen1043]完美的代价(逆序对)
- Java_servlet
- Python Class
- 捕获多路pwm输入3种方法
- Vijos1979信息传递
- 枚举移除PsSetCreateProcessNotifyRoutine
- c语言智力题