这个题非常巧妙啊~

#include <bits/stdc++.h>
#define M 170
#define N 50003
#define mod 10007
#define LL long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
inline int qpow(int x,int y)
{
int tmp=1;
for(;y;y>>=1,x=1ll*x*x%mod) if(y&1) tmp=1ll*tmp*x%mod;
return tmp;
}
int n,edges,K;
int fac[N],inv[N],g[N][M],tmp[M],hd[N],to[N<<1],nex[N<<1],S[M][M],f[N][M];
inline void addedge(int u,int v) { nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; }
void dfs1(int u,int ff)
{
f[u][0]=1;
for(int i=hd[u];i;i=nex[i])
{
int v=to[i]; if(v==ff) continue;
dfs1(v,u);
for(int j=0;j<=K;++j) f[u][j]=(f[u][j]+f[v][j])%mod;
for(int j=1;j<=K;++j) f[u][j]=(f[u][j]+f[v][j-1])%mod;
}
}
void dfs2(int u,int ff)
{
for(int j=0;j<=K;++j) g[u][j]=f[u][j];
if(ff)
{
for(int j=0;j<=K;++j) tmp[j]=g[ff][j];
for(int j=0;j<=K;++j) tmp[j]=(tmp[j]+mod-f[u][j])%mod;
for(int j=1;j<=K;++j) tmp[j]=(tmp[j]+mod-f[u][j-1])%mod;
for(int j=0;j<=K;++j) g[u][j]=(g[u][j]+tmp[j])%mod;
for(int j=1;j<=K;++j) g[u][j]=(g[u][j]+tmp[j-1])%mod;
}
for(int i=hd[u];i;i=nex[i]) if(to[i]!=ff) dfs2(to[i],u);
}
inline void Read()
{
int L,now,A,B,Q;
scanf("%d%d%d%d%d%d%d",&n,&K,&L,&now,&A,&B,&Q);
for(int i=1;i<n;i++)
{
now=(now*A+B)%Q;
int tmp=i<L?i:L;
int x=i-now%tmp,y=i+1;
addedge(x,y),addedge(y,x);
}
}
int main()
{
// setIO("input");
int i,j;
Read();
S[0][0]=fac[0]=1;
for(i=1;i<=K;++i) fac[i]=1ll*fac[i-1]*i%mod;
for(i=1;i<=K;++i) for(j=1;j<=i;++j) S[i][j]=(S[i-1][j-1]+1ll*j*S[i-1][j])%mod;
dfs1(1,0),dfs2(1,0);
for(i=1;i<=n;++i)
{
int ans=0;
for(j=0;j<=K;++j) ans=(ans+1ll*S[K][j]*fac[j]%mod*g[i][j]%mod)%mod;
printf("%d\n",ans);
}
return 0;
}

BZOJ 2159: Crash 的文明世界 第二类斯特林数+树形dp的更多相关文章

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

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

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

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

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

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

  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 的文明世界 & hdu 4625 JZPTREE —— 第二类斯特林数+树形DP

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

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

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

  7. bzoj 2159: Crash 的文明世界

    Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 480  Solved: 234[Submit][Status][Discuss] Descripti ...

  8. BZOJ.2159.Crash的文明世界(斯特林数 树形DP)

    BZOJ 洛谷 挺套路但并不难的一道题 \(Description\) 给定一棵\(n\)个点的树和\(K\),边权为\(1\).对于每个点\(x\),求\(S(x)=\sum_{i=1}^ndis( ...

  9. bzoj 4555 [Tjoi2016&Heoi2016]求和——NTT+第二类斯特林数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 第二类斯特林数展开式: \( S(i,j) = \frac{1}{j!} \sum\l ...

随机推荐

  1. java 获取手机归属地,引起net.UnknownHostException错误

    这个问题是请求,重定向了,跟入源码.修改了地址,变成302 Connection connect = Jsoup.connect(url); connect.header("Host&quo ...

  2. Web Api 转

    GET:生到数据列表(默认),或者得到一条实体数据 POST:添加服务端添加一条记录,记录实体为Form对象 PUT:添加或修改服务端的一条记录,记录实体的Form对象,记录主键以GET方式进行传输 ...

  3. Java隐式类型转换和强制类型转换

    一.强制类型转换 char 和 整型之间的类型转换 char a7 = 'a'; System.out.println(a7); System.out.println( (int)a7 ); Syst ...

  4. TCP 为什么需要三次握手而不是两次

    我的理解: A 发送给B SYN, 然后B回复A ACK,  假设这两次握手已经完成,  但是B不知道A是否收到ACK就开始  recv  , 这样就是空等  算是死循环吧??

  5. SQL*Plus 与数据库的交互(SQL*Plus时什么)

    Oracle 的 SQL*Plus 是与数据库进行交互的客户端工具,在 SQL*Plus中,可以运行 SQL*Plus 命令与 SQL*Plus 语句.   SQL*Plus 时一个基于 C/S 两层 ...

  6. android 更新版本

    1.UpdateManager package com.rfid.util; import java.io.File; import java.io.FileOutputStream; import ...

  7. Redis除了做缓存--Redis做消息队列/Redis做分布式锁/Redis做接口限流

    1.用Redis实现消息队列 用命令lpush入队,rpop出队 Long size = jedis.lpush("QueueName", message);//返回存放的数据条数 ...

  8. aapt&adb笔记

    aapt 查看安装包信息aapt list apk路径* aapt list xxx/app-debug.apk 查看apk文件信息并保存到本地(> 重定向符) * aapt list xx/a ...

  9. 从学习“单例模式”学到的Java知识:双重检查锁和延迟初始化

    一切真是有缘,上午刚刚看完单例模式,还在为其中的代码块同步而兴奋,下午就遇见这篇文章:双重检查锁定与延迟初始化.我一看,文章开头语出惊人,说这是一种错误的优化,我说,难道上午学的东西下午就过时了吗?仔 ...

  10. python3实现unix域协议(tcp、udp)通讯

    socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopb ...