Crash 的文明世界
题目描述
给一棵树,求以每个点为根时下列式子的值。
题解
当k=1时这就是一个经典的换根dp问题。
所以这道题还是要用换根dp解决。
部分分做法:
考虑转移时是这样的一个形式(图是抄的)。
用二项式定理展开就可以nk2做了。
观察到结果是一个xk的形式。
然后这个可以用斯特林数代换。
我们可以先求出每个点的后面的东西,在乘上前面的就是答案了。
这是个组合数,可以用组合数的递推解决。
代码
#include<iostream> #include<cstdio> #define N 50009 #define KK 151 using namespace std; typedef long long ll; const int mod=10007; int dp[N][KK],f[KK],h[KK],jie[KK]; int n,m,a[N],tot,head[N],K,s[KK][KK]; inline ll rd(){ll x=0;char c=getchar();bool f=0;while(!isdigit(c)){if(c=='-')f=1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return f?-x:x; } struct edge{int n,to;}e[N<<1]; inline void add(int u,int v){e[++tot].n=head[u];e[tot].to=v;head[u]=tot;e[++tot].n=head[v];e[tot].to=u;head[v]=tot; } void dfs(int u,int fa){dp[u][0]=1;for(int i=head[u];i;i=e[i].n)if(e[i].to!=fa){int v=e[i].to;dfs(v,u);(dp[u][0]+=dp[v][0])%=mod;for(int j=1;j<=K;++j)(dp[u][j]+=dp[v][j]+dp[v][j-1])%=mod;} } void dfs2(int u,int fa){for(int i=head[u];i;i=e[i].n)if(e[i].to!=fa){int v=e[i].to;for(int j=0;j<=K;++j)f[j]=0;f[0]=dp[u][0]-dp[v][0];for(int j=1;j<=K;++j)(f[j]+=dp[u][j]-dp[v][j-1]-dp[v][j]+mod*2)%=mod;(dp[v][0]+=f[0])%=mod;for(int j=1;j<=K;++j)(dp[v][j]+=f[j]+f[j-1])%=mod;dfs2(v,u);} } int main(){n=rd();K=rd();int u,v;for(int i=1;i<n;++i){u=rd();v=rd();add(u,v);}s[0][0]=1;for(int i=1;i<=K;++i){s[i][1]=1;for(int j=2;j<=i;++j)s[i][j]=(s[i-1][j-1]+s[i-1][j]*j)%mod;}jie[0]=1;for(int i=1;i<=K;++i)jie[i]=jie[i-1]*i%mod;dfs(1,0);dfs2(1,0);for(int i=1;i<=n;++i){int ans=0;for(int j=0;j<=K;++j)(ans+=s[K][j]*jie[j]%mod*dp[i][j]%mod)%=mod;printf("%d\n",ans);} return 0; }
转载于:https://www.cnblogs.com/ZH-comld/p/10265041.html
Crash 的文明世界相关推荐
- P4827 [国家集训队] Crash 的文明世界
P4827 [国家集训队] Crash 的文明世界 题目描述 Solution 看到这种kkk次幂的式子,就应该往斯特林数的方面想想. mn=∑i{ni}(ni)i!m^n=\sum_i \left\ ...
- BZOJ 2159 「国家集训队」Crash 的文明世界(第二类斯特林数,换根DP)【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2159 是 hydro 的 BZOJ ...
- [bzoj2159]Crash 的文明世界
前言 另一道斯特林数相关的题目,然而可能更考树形dp一些吧 题意简介 题面链接 题目大意 求对于每个点iii的S(i)=∑j=1ndis(i,j)kS(i)=\sum_{j=1}^ndis(i,j)^ ...
- P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】
正题 题目链接:https://www.luogu.com.cn/problem/P4827 题目大意 一颗nnn个点的树,定义dis(i,j)dis(i,j)dis(i,j)表示树上i,ji,ji, ...
- BZOJ2159 Crash 的文明世界 题解
题目大意:给一棵N个节点的树及正整数K,对每一个节点i求Σdist(i,j)^K.N<=5*10^4,K<=150. O(NK^2),O(NKlogK)的做法都可以在贾志鹏2011年的集训 ...
- 王兴的无限游戏和美团的三维文明世界|一点财经
王兴在饭否的自我介绍中曾提到,"Create like a god".<文明>这款游戏对他世界观影响至深,在这款回合策略制.没有终局的游戏中,玩家可以无限地创造自己的世 ...
- 《吴军:科技史纲60讲》走近科技文明世界
小时候我们会问"我孙悟空真的是石头里蹦出来的吗?"长大了,我们可能会问"是时势造英雄还是英雄造时势?"好奇心是我们探索未知的不懈源泉,是我们发现真理的无穷动力, ...
- 《地球以外的文明世界》——阿西莫夫
1.麦克斯韦与博尔茨曼--气体动力理论结果一,分子的平均速度与绝对稳定成正比,与质量的平方根成反比. 即,同样T下,任一气体分子有v高于其他分子的v,最终超过引力而逃逸,逃逸11.3km/s.月 ...
- NOI前总结:点分治
点分治: 点分治的题目基本一样,都是路径计数. 其复杂度的保证是依靠 $O(n)$ 找重心的,每一次至少将问题规模减小为原先的$1/2$. 找重心我喜欢$BFS$防止爆栈. 1 int Root(in ...
最新文章
- 周末思考:浅谈如何成为技术一号位?
- 全面认识Eclipse中JVM内存设置
- python程序员工作怎样-12个Python程序员面试必备问题与答案(小结)
- Hadoop 新 MapReduce 框架 Yarn 详解
- JPA时间注解(转)
- 【Libevent】Libevent学习笔记(三):事件循环
- .NET西安社区 [拥抱开源,又见 .NET] 活动简报
- 测视力距离5米还是3米_7岁男孩近视猛涨300度!眼科专家提醒:保护孩子视力这一点很关键...
- powershell快捷键_关于powershell的知识你知道多少呢
- OpenCV图像处理基础(变换和去噪)
- RFC 5961翻译
- 代码整洁之道读书笔记----第三章---函数--第一节-专注且短小
- vue中echarts3d 使用(3d地图上有柱状图数据,吉林省)
- Beyond Compare设置文本文件和Delphi源码默认的打开格式为ANSI
- 用U盘给虚拟机装系统——U深度
- pyinstaller安装配置--别踩这些keng
- android网络测试上传速度慢,【教程】状态栏添加网速 《双排上传速度和下载速度》(转)...
- ping命令常用参数
- contiki 学习笔记 leds实现部分
- 数据结构之KH[第七章] -->选择题 (二)