$x^k=\sum_{i=1}^k Stirling2(k,i)\times i!\times C(x,i)$

设$f[i][j]=\sum_{k=1}^n C(dist(i,k),j)$。

则可以利用$C(i,j)=C(i-1,j-1)+C(i-1,j)$,通过树形DP求出$f$。

时间复杂度$O((n+k)k)$。

#include<cstdio>
const int N=50010,M=155,P=10007;
int n,k,i,j,x,y,S[M][M],fac[M],g[N],v[N<<1],nxt[N<<1],ed;
int d[N][M],u[N][M],size[N],ans,L,now,tmp,A,B,Q;
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
inline void up(int&x,int y){x=(x+y+P)%P;}
void caldown(int x,int y){
d[x][0]=1;
for(int i=g[x];i;i=nxt[i])if(v[i]!=y){
caldown(v[i],x);
up(d[x][0],d[v[i]][0]);
for(int j=1;j<=k;j++)up(d[x][j],d[v[i]][j-1]+d[v[i]][j]);
}
}
void calup(int x,int y){
if(y){
u[x][0]=n-d[x][0];
for(int j=1;j<=k;j++){
u[x][j]=(((u[y][j-1]+u[y][j]+d[y][j-1]+d[y][j]-2*d[x][j-1]-d[x][j])%P)+P)%P;
if(j>1)up(u[x][j],-d[x][j-2]);
}
}
for(int i=g[x];i;i=nxt[i])if(v[i]!=y)calup(v[i],x);
}
int main(){
scanf("%d%d%d%d%d%d%d",&n,&k,&L,&now,&A,&B,&Q);
for(S[0][0]=i=1;i<=k;i++)for(S[i][i]=j=1;j<i;j++)S[i][j]=(j*S[i-1][j]+S[i-1][j-1])%P;
for(fac[0]=i=1;i<=k;i++)fac[i]=fac[i-1]*i%P;
for(i=1;i<n;i++){
now=(now*A+B)%Q,tmp=i<L?i:L;
x=i-now%tmp,y=i+1;
add(x,y),add(y,x);
}
caldown(1,0),calup(1,0);
for(i=1;i<=n;i++){
for(ans=0,j=1;j<=k;j++)up(ans,1LL*S[k][j]*fac[j]*(u[i][j]+d[i][j])%P);
printf("%d\n",ans);
}
return 0;
}

  

BZOJ2159 : Crash 的文明世界的更多相关文章

  1. BZOJ2159 Crash的文明世界(树形dp+斯特林数)

    根据组合意义,有nk=ΣC(n,i)*i!*S(k,i) (i=0~k),即将k个有标号球放进n个有标号盒子的方案数=在n个盒子中选i个将k个有标号球放入并且每个盒子至少有一个球. 回到本题,可以令f ...

  2. BZOJ2159 Crash 的文明世界 【第二类斯特林数 + 树形dp】

    题目链接 BZOJ2159 题解 显然不能直接做点分之类的,观察式子中存在式子\(n^k\) 可以考虑到 \[n^k = \sum\limits_{i = 0} \begin{Bmatrix} k \ ...

  3. BZOJ2159 Crash的文明世界

    Description 传送门 给你一个n个点的树,边权为1. 对于每个点u, 求:\(\sum_{i = 1}^{n} distance(u, i)^{k}\) $ n \leq 50000, k ...

  4. [BZOJ2159]Crash的文明世界(斯特林数+树形DP)

    题意:给定一棵树,求$S(i)=\sum_{j=1}^{n}dist(i,j)^k$.题解:根据斯特林数反演得到:$n^m=\sum_{i=0}^{n}C(n,i)\times i!\times S( ...

  5. BZOJ2159 Crash的文明世界——树上DP&&第二类Stirling数

    题意 给定一个有 $n$ 个结点的树,设 $S(i)$ 为第 $i$ 个结点的“指标值”,定义为 $S(i)=\sum_{i=1}^{n}dist(i,j)^k$,$dist(i, j)$ 为结点 $ ...

  6. 题解 [BZOJ2159] Crash的文明世界

    题面 解析 这题一眼换根DP啊 首先,我们考虑一下如何转换\(n^m\)这个式子, 先把式子摆出来吧:\(n^m=\sum_{j=0}^mS(m,j)C_n^jj!\) 其中\(S(m,j)\)表示第 ...

  7. 【BZOJ2159】Crash的文明世界(第二类斯特林数,动态规划)

    [BZOJ2159]Crash的文明世界(第二类斯特林数,动态规划) 题面 BZOJ 洛谷 题解 看到\(k\)次方的式子就可以往二项式的展开上面考,但是显然这样子的复杂度会有一个\(O(k^2)\) ...

  8. 【BZOJ2159】Crash的文明世界

    [2011集训贾志鹏]Crash的文明世界 Description Crash小朋友最近迷上了一款游戏--文明5(Civilization V).在这个游戏中,玩家可以建立和发展自己的国家,通过外交和 ...

  9. [国家集训队] Crash 的文明世界(第二类斯特林数)

    题目 [国家集训队] Crash 的文明世界 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 \[\begin{aligned} ans_x&=\sum\limi ...

随机推荐

  1. 素数环(dfs+回溯)

    题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...

  2. hdu 4911Inversion

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 题意:给定一个序列和k,求在k次交换之后序列的逆序数,只能相邻两个数交换且只有左边的数大于右边时才能 ...

  3. JavaScript基础——实现循环

    循环是多次执行同一段代码的一种手段.当你需要在一个数组或对象集上重复执行相同的任务时,这是非常有用的. JavaScript提供执行for和while循环的功能. 1.while循环 JavaScri ...

  4. vim 查找时忽略大小写

    :set ic 忽略大小写#ignorecase :set noic 不忽略大小写#noignorecase

  5. C#接扣和抽象类

    什么是接口? 接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称.参数和返回值.接口方法不能包含任何实现,CLR允许接口可以包含事件.属性.索引器.静态方法.静态字段.静态构造函数以及常数.但是 ...

  6. poj 2001:Shortest Prefixes(字典树,经典题,求最短唯一前缀)

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12731   Accepted: 544 ...

  7. C# Qrcode生成二维码支持中文,带图片,带文字 2015-01-22 15:11 616人阅读 评论(1) 收藏

    1.下载Qrcode库源码,下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library 2.打开源码时,部分类库 ...

  8. 序列化悍将Protobuf-Net,入门动手实录

    最近在研究web api 2,看了一篇文章,讲解如何提升性能的, 在序列化速度的跑分中,Protobuf一骑绝尘,序列化速度快,性能强,体积小,所以打算了解下这个利器 1:安装篇 谷歌官方没有提供.n ...

  9. [JavaCore] 微信手机浏览器版本判断

    公司要做微支付,微信浏览器版本要大于5 package com.garinzhang.web.weixin; import org.apache.commons.lang.StringUtils; i ...

  10. 难得的中文ASP.NET 5/MVC 6入门教程

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于ASP.NET 5还未正式发布,即使是官方文档都还不完善,更不要说系统的中文文档了 ...