BZOJ2159 Crash 的文明世界 【第二类斯特林数 + 树形dp】
题目链接
题解
显然不能直接做点分之类的,观察式子中存在式子\(n^k\)
可以考虑到
\]
发现\(k\)很小,对于每个点可以直接\(O(k)\)计算
所以我们只需求出
\]
转移可以利用
\]
复杂度\(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】的更多相关文章
- BZOJ 2159: Crash 的文明世界 第二类斯特林数+树形dp
这个题非常巧妙啊~ #include <bits/stdc++.h> #define M 170 #define N 50003 #define mod 10007 #define LL ...
- [国家集训队] Crash 的文明世界(第二类斯特林数)
题目 [国家集训队] Crash 的文明世界 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 \[\begin{aligned} ans_x&=\sum\limi ...
- bzoj 2159 Crash 的文明世界 && hdu 4625 JZPTREE ——第二类斯特林数+树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2159 学习材料:https://blog.csdn.net/litble/article/d ...
- P4827 [国家集训队] Crash 的文明世界(第二类斯特林数+树形dp)
传送门 对于点\(u\),所求为\[\sum_{i=1}^ndis(i,u)^k\] 把后面那堆东西化成第二类斯特林数,有\[\sum_{i=1}^n\sum_{j=0}^kS(k,j)\times ...
- BZOJ 2159: Crash 的文明世界(组合数学+第二类斯特林数+树形dp)
传送门 解题思路 比较有意思的一道数学题.首先\(n*k^2\)的做法比较好想,就是维护一个\(x^i\)这种东西,然后转移的时候用二项式定理拆开转移.然后有一个比较有意思的结论就是把求\(x^i\) ...
- 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 ...
- HDU - 4625 JZPTREE(第二类斯特林数+树DP)
https://vjudge.net/problem/HDU-4625 题意 给出一颗树,边权为1,对于每个结点u,求sigma(dist(u,v)^k). 分析 贴个官方题解 n^k并不好转移,于是 ...
- 【BZOJ2159】Crash的文明世界(第二类斯特林数,动态规划)
[BZOJ2159]Crash的文明世界(第二类斯特林数,动态规划) 题面 BZOJ 洛谷 题解 看到\(k\)次方的式子就可以往二项式的展开上面考,但是显然这样子的复杂度会有一个\(O(k^2)\) ...
- 国家集训队 Crash 的文明世界(第二类斯特林数+换根dp)
题意 题目链接:https://www.luogu.org/problem/P4827 给定一棵 \(n\) 个节点的树和一个常数 \(k\) ,对于树上的每一个节点 \(i\) ,求出 \( ...
随机推荐
- Redis源码阅读(三)集群-连接初始化
Redis源码阅读(三)集群-连接建立 对于并发请求很高的生产环境,单个Redis满足不了性能要求,通常都会配置Redis集群来提高服务性能.3.0之后的Redis支持了集群模式. Redis官方提供 ...
- dom学习要点
Dom操作 1.文本内容操作 - innerText:操作文本 - innerHtml:操作全内容 //innerText标签: <div id='i2' ><a>土味程序员& ...
- NDK 链接第三方静态库的方法
将NDK编译的第三方静态拷贝到JNI目录下,在Android.mk中添加如下代码 以openssl静态库(libcrypto-static.a)为例 第一种链接方法:LOCAL_LDFLAGS := ...
- HDFS handler
http://docs.oracle.com/goldengate/bd1221/gg-bd/GADBD/GUID-85A82B2E-CD51-463A-8674-3D686C3C0EC0.htm#G ...
- 学霸网站-Alpha版本发布说明
项目名称 学霸网站 项目版本 Alpha 项目团队 ourteam 发布日期 2014-11-23 一.版本的新功能 1.匿名提问 用户提问的时候可以选择匿名提问,这样在问题的详细信息不会显示提出者的 ...
- Percona XtraDB Cluster 5.7
附加:相关在线文档https://www.percona.com/software/documentation 安装要求: 1.root权限2.保证开放3306.4444.4567.4568端口3.关 ...
- 场景调研 persona
1.姓名:王涛 2.年龄:22 3.收入:基本无收入 4.代表用户在市场上的比例和重要性:王涛为铁道学生.本软件的用户主要是学生和老师,尤其是广大的铁大学子,所以此典型用户的重要性不言而喻,而且比例相 ...
- bata1
目录 组员情况 组员1(组长):胡绪佩 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团 ...
- struts2.3.16.1+hibernate4.3.4+spring4.0.2
把之前的老项目用新的改了 发现新的有点很方便啊 Struts2+Hibernate+Spring整合 用的是 struts2.3.16.1 hibernate4.3.4 ...
- Codeforces Round #157 (Div. 1) B. Little Elephant and Elections 数位dp+搜索
题目链接: http://codeforces.com/problemset/problem/258/B B. Little Elephant and Elections time limit per ...