前言

另一道斯特林数相关的题目,然而可能更考树形dp一些吧

题意简介

题面链接

题目大意

求对于每个点iii的S(i)=∑j=1ndis(i,j)kS(i)=\sum_{j=1}^ndis(i,j)^kS(i)=j=1∑n​dis(i,j)k

数据范围

n≤50000,k≤150n\le50000,k\le 150n≤50000,k≤150

题解

直接上正解吧

同理这里有幂次
回到式子xn=∑i=0n{ni}xi↓x^n=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}x^{i\downarrow}xn=i=0∑n​{ni​}xi↓证明
直接暴力带入
S(i)=∑j=1ndis(i,j)k=∑j=1n∑l=0k{kl}dis(i,j)l↓=∑l=0k{kl}∑j=1ndis(i,j)l↓=∑l=0k{kl}l!∑j=1n(dis(i,j)l)\begin{aligned} S(i)&=\sum_{j=1}^ndis(i,j)^k\\ &=\sum_{j=1}^n\sum_{l=0}^k\begin{Bmatrix}k\\l\end{Bmatrix}dis(i,j)^{l\downarrow}\\ &=\sum_{l=0}^k\begin{Bmatrix}k\\l\end{Bmatrix}\sum_{j=1}^ndis(i,j)^{l\downarrow}\\ &=\sum_{l=0}^k\begin{Bmatrix}k\\l\end{Bmatrix}l!\sum_{j=1}^n\binom{dis(i,j)}l\\ \end{aligned} S(i)​=j=1∑n​dis(i,j)k=j=1∑n​l=0∑k​{kl​}dis(i,j)l↓=l=0∑k​{kl​}j=1∑n​dis(i,j)l↓=l=0∑k​{kl​}l!j=1∑n​(ldis(i,j)​)​
我们发现求斯特林数是可以Θ(k2)\Theta(k^2)Θ(k2)做的,求阶乘也很方便,是Θ(k)\Theta(k)Θ(k)的,现在关键是要求每个点,对于每个1≤l≤k1\le l\le k1≤l≤k的f(i)=∑j=1n(dis(i,j)l)f(i)=\sum_{j=1}^n\binom{dis(i,j)}lf(i)=j=1∑n​(ldis(i,j)​)
众所周知(就我不知),组合数有个很好的性质
C(n,m)=C(n−1,m−1)+C(n−1,m)C(n,m)=C(n-1,m-1)+C(n-1,m)C(n,m)=C(n−1,m−1)+C(n−1,m)
所以直接树形dp(更准确的来说这里是上下dp)就好了
复杂度Θ(nk)\Theta(nk)Θ(nk)

代码

注意:lydsy上的数据是有压缩的,洛谷是未压缩的,博主比较偷懒,所以代码是未压缩的输入

#include<cstdio>
#include<cctype>
#include<algorithm>
namespace fast_IO
{const int IN_LEN=10000000,OUT_LEN=10000000;char ibuf[IN_LEN],obuf[OUT_LEN],*ih=ibuf+IN_LEN,*oh=obuf,*lastin=ibuf+IN_LEN,*lastout=obuf+OUT_LEN-1;inline char getchar_(){return (ih==lastin)&&(lastin=(ih=ibuf)+fread(ibuf,1,IN_LEN,stdin),ih==lastin)?EOF:*ih++;}inline void putchar_(const char x){if(oh==lastout)fwrite(obuf,1,oh-obuf,stdout),oh=obuf;*oh++=x;}inline void flush(){fwrite(obuf,1,oh-obuf,stdout);}
}
using namespace fast_IO;
#define getchar() getchar_()
#define putchar(x) putchar_((x))
#define rg register
typedef long long LL;
template <typename T> inline T max(const T a,const T b){return a>b?a:b;}
template <typename T> inline T min(const T a,const T b){return a<b?a:b;}
template <typename T> inline void mind(T&a,const T b){a=a<b?a:b;}
template <typename T> inline void maxd(T&a,const T b){a=a>b?a:b;}
template <typename T> inline T abs(const T a){return a>0?a:-a;}
template <typename T> inline void swap(T&a,T&b){T c=a;a=b;b=c;}
template <typename T> inline T gcd(const T a,const T b){if(!b)return a;return gcd(b,a%b);}
template <typename T> inline T lcm(const T a,const T b){return a/gcd(a,b)*b;}
template <typename T> inline T square(const T x){return x*x;};
template <typename T> inline void read(T&x)
{char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;
}
template <typename T> inline void printe(const T x)
{if(x>=10)printe(x/10);putchar(x%10+'0');
}
template <typename T> inline void print(const T x)
{if(x<0)putchar('-'),printe(-x);else printe(x);
}
const int mod=10007;
const int maxn=50001,maxm=100001;
int n,k;
int S[151][151],fac[151];
int head[maxn],nxt[maxm],tow[maxm],tmp;
inline void addb(const int u,const int v)
{tmp++;nxt[tmp]=head[u];head[u]=tmp;tow[tmp]=v;
}
int f[maxn][151];
void dfs1(const int u,const int fa)
{f[u][0]=1;for(rg int i=head[u];i;i=nxt[i]){const int v=tow[i];if(v!=fa){dfs1(v,u);f[u][0]=(f[u][0]+f[v][0])%mod;for(rg int j=1;j<=k;j++)f[u][j]=(f[u][j]+f[v][j]+f[v][j-1])%mod;}}
}
int z[151];
void dfs2(const int u,const int fa)
{for(rg int i=head[u];i;i=nxt[i]){const int v=tow[i];if(v!=fa){z[0]=(f[u][0]+mod-f[v][0])%mod;for(rg int j=1;j<=k;j++)z[j]=(f[u][j]+mod+mod-f[v][j]-f[v][j-1])%mod;f[v][0]=(f[v][0]+z[0])%mod;for(rg int j=1;j<=k;j++)f[v][j]=(f[v][j]+z[j]+z[j-1])%mod;dfs2(v,u);}}
}
int main()
{read(n),read(k);S[0][0]=1;for(rg int i=1;i<=k;i++)for(rg int j=1;j<=k;j++)S[i][j]=(S[i-1][j-1]+j*S[i-1][j])%mod;fac[0]=1;for(rg int i=1;i<=k;i++)fac[i]=fac[i-1]*i%mod;for(rg int i=1;i<n;i++){int u,v;read(u),read(v);addb(u,v),addb(v,u);}dfs1(1,1);dfs2(1,1);for(rg int i=1;i<=n;i++){int ans=0;for(rg int j=0;j<=k;j++)ans=(ans+S[k][j]*fac[j]%mod*f[i][j])%mod;//print(f[i][j]);print(ans),putchar('\n');}return flush(),0;
}

总结

还是蛮清新的一道推式子+树形dp题
算是一种思路的联系吧

[bzoj2159]Crash 的文明世界相关推荐

  1. BZOJ2159 Crash 的文明世界 题解

    题目大意:给一棵N个节点的树及正整数K,对每一个节点i求Σdist(i,j)^K.N<=5*10^4,K<=150. O(NK^2),O(NKlogK)的做法都可以在贾志鹏2011年的集训 ...

  2. P4827 [国家集训队] Crash 的文明世界

    P4827 [国家集训队] Crash 的文明世界 题目描述 Solution 看到这种kkk次幂的式子,就应该往斯特林数的方面想想. mn=∑i{ni}(ni)i!m^n=\sum_i \left\ ...

  3. BZOJ 2159 「国家集训队」Crash 的文明世界(第二类斯特林数,换根DP)【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2159 是 hydro 的 BZOJ ...

  4. Crash 的文明世界

    题目描述 给一棵树,求以每个点为根时下列式子的值. 题解 当k=1时这就是一个经典的换根dp问题. 所以这道题还是要用换根dp解决. 部分分做法: 考虑转移时是这样的一个形式(图是抄的). 用二项式定 ...

  5. P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】

    正题 题目链接:https://www.luogu.com.cn/problem/P4827 题目大意 一颗nnn个点的树,定义dis(i,j)dis(i,j)dis(i,j)表示树上i,ji,ji, ...

  6. 王兴的无限游戏和美团的三维文明世界|一点财经

    王兴在饭否的自我介绍中曾提到,"Create like a god".<文明>这款游戏对他世界观影响至深,在这款回合策略制.没有终局的游戏中,玩家可以无限地创造自己的世 ...

  7. 《吴军:科技史纲60讲》走近科技文明世界

    小时候我们会问"我孙悟空真的是石头里蹦出来的吗?"长大了,我们可能会问"是时势造英雄还是英雄造时势?"好奇心是我们探索未知的不懈源泉,是我们发现真理的无穷动力, ...

  8. 《地球以外的文明世界》——阿西莫夫

    1.麦克斯韦与博尔茨曼--气体动力理论结果一,分子的平均速度与绝对稳定成正比,与质量的平方根成反比.    即,同样T下,任一气体分子有v高于其他分子的v,最终超过引力而逃逸,逃逸11.3km/s.月 ...

  9. GOOD BYE OI

    大米饼正式退役了,OI给我带来很多东西 我会的数学知识基本都在下面了 博客园的评论区问题如果我看到了应该是会尽力回答的... 这也是我作为一个OIer最后一次讲课的讲稿 20190731 多项式乘法 ...

最新文章

  1. sim中do文件/memory(readmemb命令符)/移位编写
  2. java appendchild_详解javascript appendChild()的完整功能
  3. 如何制定项目工作计划
  4. 处理对象的多种状态及其相互转换——状态模式
  5. 循环码差错图样matlab,基于MATLAB的(15,7)循环码的编译仿真.doc
  6. QComboBox样式
  7. KMP字符串比对算法理解
  8. [unity3d]再次修改socket聊天,完美的服务器端
  9. Python3之max key参数学习记录
  10. C程序设计语言现代方法06:循环
  11. linux基本命令示例_Linux中带示例的sort命令
  12. 蓝桥杯2019年第十届C/C++国赛B组 题B-质数拆分(素数筛选+01背包问题)
  13. php自定义函数指定参数类型,php – Doctrine:如何添加带可选参数的自定义函数?...
  14. 《撬动地球的Google》——Google的第一桶金(转载)
  15. VS2017使用教程(使用VS2017编写C语言程序)
  16. 网站目标定位的关键词和选择质量高的关键词
  17. 2012“第四届云计算中国峰会”倒计时
  18. Indy TCP/IP 组件里的几个常用方法
  19. 深度学习图像分类(六):Stochastic_Depth_Net
  20. windows电脑桌面不见了

热门文章

  1. 【技术改造】电商系统用户模块集成Feign-1
  2. OutputStreamWriter介绍代码实现
  3. dell电脑重装linux系统,重装系统出现问题,如何解决?
  4. Linux umask 文件默认权限
  5. Cortex-M3-寄存器
  6. Java学习路线详解
  7. 第三章 安装apache
  8. 存储变革 IBM V5000四大优势助用户破旧立新
  9. Mysql学习笔记(三)运算符和控制流函数
  10. android 减少图片出现oom错误