题目链接

BZOJ2159

题解

显然不能直接做点分之类的,观察式子中存在式子\(n^k\)

可以考虑到

\[n^k = \sum\limits_{i = 0} \begin{Bmatrix} k \\ i \end{Bmatrix} {n \choose i}i!
\]

发现\(k\)很小,对于每个点可以直接\(O(k)\)计算

所以我们只需求出

\[f[i][j] = \sum\limits_{x = 1}^{N}{dis(i,x) \choose j}
\]

转移可以利用

\[{n \choose m} = {n - 1 \choose m} + {n - 1 \choose m - 1}
\]

复杂度\(O(nk + k^2)\)

最后注意一下读入是加密的,在题目末尾

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 50005,maxm = 155,INF = 1000000000,P = 10007;
int f[maxn][maxm],g[maxm],n,K,fa[maxn];
int h[maxn],ne = 1;
struct EDGE{int to,nxt;}ed[maxn << 1];
inline void build(int u,int v){
ed[++ne] = (EDGE){v,h[u]}; h[u] = ne;
ed[++ne] = (EDGE){u,h[v]}; h[v] = ne;
}
void dfs1(int u){
f[u][0] = 1;
Redge(u) if ((to = ed[k].to) != fa[u]){
fa[to] = u; dfs1(to);
f[u][0] = f[u][0] + f[to][0];
for (int k = 1; k <= K; k++)
f[u][k] = (f[u][k] + f[to][k - 1] + f[to][k]) % P;
}
}
void dfs2(int u){
if (fa[u]){
int v = fa[u];
g[0] = f[v][0] - f[u][0];
for (int k = 1; k <= K; k++)
g[k] = ((f[v][k] - f[u][k] - f[u][k - 1]) % P + P) % P;
f[u][0] = n;
for (int k = 1; k <= K; k++)
f[u][k] = (f[u][k] + g[k] + g[k - 1]) % P;
}
Redge(u) if ((to = ed[k].to) != fa[u])
dfs2(to);
}
int S[maxm][maxm],ans,fac[maxm];
void work(){
S[0][0] = 1; fac[0] = 1;
for (register int i = 1; i <= K; i++) fac[i] = fac[i - 1] * i % P;
for (register int i = 1; i <= K; i++)
for (register int j = 1; j <= i; j++)
S[i][j] = (S[i - 1][j - 1] + j * S[i - 1][j]) % P;
for (register int i = 1; i <= n; i++){
ans = 0;
for (register int k = 0; k <= K; k++)
ans = (ans + f[i][k] * fac[k] % P * S[K][k] % P) % P;
printf("%d\n",ans);
}
}
void readin() {
int L,now,A,B,Q,tmp;
scanf("%d%d%d",&n,&K,&L);
scanf("%d%d%d%d",&now,&A, &B, &Q);
for (int i = 1; i < n; i++){
now = (now * A + B) % Q; tmp = (i < L) ? i : L;
build(i - now % tmp,i + 1);
}
}
int main(){
readin();
dfs1(1);
dfs2(1);
work();
return 0;
}

BZOJ2159 Crash 的文明世界 【第二类斯特林数 + 树形dp】的更多相关文章

  1. BZOJ 2159: Crash 的文明世界 第二类斯特林数+树形dp

    这个题非常巧妙啊~ #include <bits/stdc++.h> #define M 170 #define N 50003 #define mod 10007 #define LL ...

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

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

  3. bzoj 2159 Crash 的文明世界 && hdu 4625 JZPTREE ——第二类斯特林数+树形DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2159 学习材料:https://blog.csdn.net/litble/article/d ...

  4. P4827 [国家集训队] Crash 的文明世界(第二类斯特林数+树形dp)

    传送门 对于点\(u\),所求为\[\sum_{i=1}^ndis(i,u)^k\] 把后面那堆东西化成第二类斯特林数,有\[\sum_{i=1}^n\sum_{j=0}^kS(k,j)\times ...

  5. BZOJ 2159: Crash 的文明世界(组合数学+第二类斯特林数+树形dp)

    传送门 解题思路 比较有意思的一道数学题.首先\(n*k^2\)的做法比较好想,就是维护一个\(x^i\)这种东西,然后转移的时候用二项式定理拆开转移.然后有一个比较有意思的结论就是把求\(x^i\) ...

  6. bzoj 2159 Crash 的文明世界 & hdu 4625 JZPTREE —— 第二类斯特林数+树形DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2159 使用公式:\( n^{k} = \sum\limits_{i=0}^{k} S(k,i ...

  7. HDU - 4625 JZPTREE(第二类斯特林数+树DP)

    https://vjudge.net/problem/HDU-4625 题意 给出一颗树,边权为1,对于每个结点u,求sigma(dist(u,v)^k). 分析 贴个官方题解 n^k并不好转移,于是 ...

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

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

  9. 国家集训队 Crash 的文明世界(第二类斯特林数+换根dp)

    题意 ​ 题目链接:https://www.luogu.org/problem/P4827 ​ 给定一棵 \(n\) 个节点的树和一个常数 \(k\) ,对于树上的每一个节点 \(i\) ,求出 \( ...

随机推荐

  1. XSS分类&危害&防御

    XSS(跨站脚本)漏洞是什么? 在网页中插入恶意的js脚本,由于网站没对其过滤,当用户浏览时,就会触发脚本,造成XSS攻击 XSS分类? 1.反射型 用户输入的注入代通过浏览器传入到服务器后,又被目标 ...

  2. LinuxMint 18.3禁用ipv6

    编辑/etc/sysctl.conf文件,添加如下内容 net.ipv6.conf.all.disable_all = 1 保存后执行 sudo sysctl -p 即可生效

  3. OpenFastPath(1):快平面接口是否支持多ip

    1.配置环境 fp0接口上配置两个IP地址: fp0       Link encap:Ethernet  HWaddr 00:0c:29:30:38:db inet addr:192.168.56. ...

  4. Spring AOP部分源码分析

    Spring源码流程分析-AOP相关 根据Spring源码整理,其中Calculator为自定义的实现方法. AnnotationConfigApplicationContext()加载配置类的流程 ...

  5. hadoop之计数器和管道的mrunit测试

    引言 hadoop的调试真心让人灰常恼火,而且从企业实际出发,集群的资源是有限的,不可能在集群上跑一遍又一遍根据log去调试代码,那么使用MRUnit编写测试单元,显得尤为重要.MRUnit中的Map ...

  6. 最详细的springmvc-mybatis教程

    链接:http://blog.csdn.net/qq598535550/article/details/51703190

  7. 第十二次作业psp

    psp 进度条 代码累积折线图 博文累积折线图 psp饼状图

  8. 记事本APP之Alpha报告

    项目名称 记事本APP 项目版本 Alpha版本 负责人 北京航空航天大学计算机学院 Echo软件团队 联系方式 http://www.cnblogs.com/echo-buaa/ 要求发布日期 20 ...

  9. php 把数字转化为大写中文

    PHP 数字转大写中文 PHP入门小菜鸟一枚.下午要求写一个把数字转成大写中文的脚本,百度了一波,几十个博客和网站都是用的那四个代码,第一个运行不了,第二个有问题,不合要求,第三个第四个太长,懒得看, ...

  10. 关于js typeof 的理解