树形dp+第二类斯特林数

又是这种形式,只不过这次不用伯努利数了

直接搞肯定不行,我们化简一下式子,考虑x^n的组合意义,是把n个物品放到x个箱子里的方案数。那么就等于这个i=1->n,sigma(s[n,i]*A(x,i)),就是枚举要分成几组,这个用斯特林数算,然后把这些组放进箱子里,那么就是A(x,i),A是排列,但是这样还是不行,我们把A(x,i)=C(x,i)*i!,这样就行了,阶乘和斯特林数可以提出来,只要预处理一个点的组合数就行了,也就是∑i=1->n ∑ j=1->k C(dis(u,i),j),这个东西我们可以利用组合数的性质dp,也就是c[i][j]=c[i-1][j]+c[i-1][j-1],记住要减去重复的

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + , M = , P = ;
int n, m, L, now, A, B, Q;
int s[M][M], up[N][M], down[N][M], fac[M];
vector<int> G[N];
void dfs(int u, int last)
{
down[u][] = ;
for(int i = ; i < G[u].size(); ++i)
{
int v = G[u][i];
if(v == last) continue;
dfs(v, u);
down[u][] = (down[u][] + down[v][]) % P;
for(int j = ; j <= m; ++j) down[u][j] = ((down[u][j] + (down[v][j - ] + down[v][j]) % P) % P) % P;
}
}
void dfs1(int u, int last)
{
if(last)
{
up[u][] = n - down[u][];
for(int i = ; i <= m; ++i)
{
up[u][i] = (up[u][i] + ((up[last][i] + up[last][i - ] + down[last][i] + down[last][i - ] - down[u][i] - (down[u][i - ] << )) % P + P) % P) % P;
if(i > ) up[u][i] = ((up[u][i] - down[u][i - ]) % P + P) % P;
}
}
for(int i = ; i < G[u].size(); ++i)
{
int v = G[u][i];
if(v == last) continue;
dfs1(v, u);
}
}
int main()
{
scanf("%d%d%d%d%d%d%d", &n, &m, &L, &now, &A, &B, &Q);
for(int i = ; i < n; ++i)
{
now = (now * A + B) % Q;
int tmp = min(i, L);
int u = i - now % tmp, v = i + ;
G[u].push_back(v);
G[v].push_back(u);
}
s[][] = fac[] = ;
for(int i = ; i <= m; ++i)
{
fac[i] = fac[i - ] * i % P;
for(int j = ; j <= m; ++j)
s[i][j] = (s[i - ][j] * j % P + s[i - ][j - ]) % P;
}
dfs(, );
dfs1(, );
for(int i = ; i <= n; ++i)
{
int ans = ;
for(int j = ; j <= m; ++j) ans = (ans + s[m][j] * fac[j] % P * (up[i][j] + down[i][j]) % P) % P;
printf("%d\n", ans);
}
return ;
}

最新文章

  1. JMeter压力测试
  2. Java NIO (转)
  3. Nginx采用https加密访问后出现的问题
  4. 酒鬼-DP
  5. http拦截器interceptors
  6. 税号输入框 将input框中的输入自动转化成半角大写
  7. 关于echarts 报错 初始化对象未定义
  8. esLint 配置
  9. .NET Core + Abp踩坑和填坑记录(1)
  10. 终极 Shell&mdash;&mdash;ZSH
  11. Lua中,泛型for循环遍历table时,ipairs和pairs的区别
  12. kafka.common.KafkaException: Failed to acquire lock on file .lock in /tmp/kafka-logs. A Kafka instance in another process or thread is using this directory.
  13. 30个最常用的Linux系统命令行
  14. Expires和Cache-Control的理解
  15. UML类图中箭头的含义
  16. OAuth2.0的理解&amp;基础
  17. python 流程控制(for循环语句)
  18. Jquery-无法有效获取当前窗口高度
  19. vi和vim的三种模式
  20. 远程binlog

热门文章

  1. CTP报单状态 OrderStatus全部状态
  2. react 自定义 TabBar 组件
  3. Codeforces 569 B. Inventory
  4. 宜信开源微服务任务调度平台(SIA-TASK)
  5. (转)Java web 项目中文件路径
  6. windows下route命令详解(转载)
  7. SAM4E单片机之旅——3、LED闪烁之定时器中断
  8. leetcode题目解答报告(2)
  9. 无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护
  10. Interface AutoCloseable