老师发福利,放了两道一毛一样的题。


考虑无视战术,直接化简:

\[\sum_{v=1}^ndis(u,v)^k=\sum_{v=1}^n\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}dis(u,v)^\underline i
\]
\[=\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}\sum_{v=1}^ndis(u,v)^\underline i
\]
\[=\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}\sum_{v=1}^ni!\binom{dis(u,v)}i
\]
\[=\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}i!\sum_{v=1}^n\binom{dis(u,v)}i
\]
\[=\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}i!\sum_{v=1}^n\binom{dis(u,v)-1}i+\binom{dis(u,v)-1}{i-1}
\]

为什么要进行最后一步分解呢?这和接下来的推导有关系。

实际上推到这里已经不用再推了,我们只需要能求出 \(f_{u,i}=\sum\limits_{v=1}^n\binom{dis(u,v)}i\) 就可以了。考虑换根 \(dp\)。

首先显然有:

\[f_{u,0}=1+\sum_{v\in son(u)}f_{v,0}
\]

对于 \(i>0\) 的情况,我们可以使用最后一步的推导。考虑最后一步 \(dis(u,v)-1\) 相当于是把问题转化到了儿子上,即:

\[f_{u,i}=\sum_{v\in son(u)}f_{v,i-1}+f_{v,i}
\]

换根 \(dp\),时间复杂度 \(O(nk)\)。

#include<bits/stdc++.h>
using namespace std;
const int N=155,M=50005,p=10007;
int str[N][N],f[M][N],g[M][N],ans;
vector<int>ve[M];int n,k,l,nw,aa,bb,q;
void dfs1(int x,int fa){
for(auto y:ve[x]){
if(y==fa) continue;dfs1(y,x);
f[x][0]=(f[x][0]+f[y][0])%p;
for(int i=1;i<=k;i++)
f[x][i]=(f[x][i]+f[y][i]+f[y][i-1])%p;
}f[x][0]++;
}void dfs2(int x,int fa){
if(x!=1){
for(int i=1;i<=k;i++){
g[x][i]+=g[fa][i]+g[fa][i-1]+f[fa][i];
g[x][i]+=f[fa][i-1]-f[x][i]-2*f[x][i-1];
if(i>1) g[x][i]-=f[x][i-2];g[x][i]%=p;
}g[x][0]=(g[fa][0]+f[fa][0]-f[x][0]+p)%p;
}for(auto y:ve[x])
if(y!=fa) dfs2(y,x);
}int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>k>>l>>nw>>aa>>bb>>q,str[0][0]=1;
for(int i=1;i<n;i++){
nw=(nw*aa+bb)%q;
int tmp=(i<l?i:l);
int x=i-nw%tmp,y=i+1;
ve[x].push_back(y);
ve[y].push_back(x);
}for(int i=1;i<=k;i++) for(int j=1;j<=i;j++)
str[i][j]=(str[i-1][j-1]+str[i-1][j]*j)%p;
dfs1(1,0),dfs2(1,0);
for(int j=1;j<=n;j++,ans=0){
for(int i=0,jc=1;i<=k;i++,jc=jc*i%p){
int now=str[k][i]*jc%p;
ans=(ans+now*(f[j][i]+g[j][i]))%p;
}cout<<(ans+p)%p<<"\n";
}return 0;
}

[HDU4625] JZPTREE+[国家集训队] Crash 的文明世界 题解的更多相关文章

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

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

  2. [国家集训队] Crash的文明世界

    Description 给定一棵 \(n\) 个点的树,对于每个点 \(i\) 求 \(S(i)=\sum\limits_{j=1}^n \operatorname{dist(i,j)}^k\) .\ ...

  3. [国家集训队] Crash 的文明世界

    不错的树形$ DP$的题 可为什么我自带大常数啊$ cry$ 链接:here 题意:给定一棵$ n$个节点的树,边权为$ 1$,对于每个点$ x$求$ \sum\limits_{i=1}^n dist ...

  4. 洛谷P4827 [国家集训队] Crash 的文明世界 [斯特林数,组合数,DP]

    传送门 思路 又见到这个\(k\)次方啦!按照套路,我们将它搞成斯特林数: \[ ans_x=\sum_{i=0}^k i!S(k,i)\sum_y {dis(x,y) \choose i} \] 前 ...

  5. P4827 [国家集训队] Crash 的文明世界

    传送门:洛谷 题目大意:设$$S(i)=\sum_{j=1}^ndis(i,j)^k$$,求$S(1),S(2),\ldots,S(n)$. 数据范围:$n\leq 50000,k\leq 150$ ...

  6. 解题:国家集训队 Crash 的文明世界

    题面 这种套着高次幂的统计问题一般都要用到第二类斯特林数和自然数幂的关系:$a^k=\sum\limits_{i=0}^{k}S_k^iC_a^i*i!$ 那么对于每个点$x$有: $ans_x=\s ...

  7. 【[国家集训队] Crash 的文明世界】

    先写一个五十分的思路吧 首先这道题有一个弱化版 [POI2008]STA-Station 相当于\(k=1\),于是就是一个非常简单的树形\(dp\)的\(up\ \ and\ \ down\)思想 ...

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

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

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

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

  10. 洛谷 P4827 [国家集训队] Crash 的文明世界

    题目描述 ​ 给你一棵 n 个点的树,对于树上的每个节点 i,求 \(\sum_{j=1}^ndis(i,j)^k\).其中 \(dis(i,j)\) 为两点在树上的距离. 输入格式 ​ 第一行两个整 ...

随机推荐

  1. C#生成二维码的两种方式(快看二维码)

    前言 最近在做项目的时候遇到一个需求是将文本内容生成二维码图片的,对于这个需求那就直接上手(两种方法,我比较喜欢第二种方式,往上面也是有很多的方法.这里只作为个人纪录) 方法一:ThoughtWork ...

  2. C# Linq 的三种去重方式(Distinct)

    前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好 ...

  3. 在Windows下为CodeBlocks20.3安装、配置wxWidget3.2.6

    0.前言 CodeBlocks是使用C++编写程序的一个很好的开发环境,最大的好处是它是开源的.免费的,而不仅仅是因为它具有跨平台的能力.还有一个很重要的原因是在CodeBlocks中可以使用wxWi ...

  4. shell 获取进程号

    # Shell最后运行的后台PID(后台运行的最后一个进程的进程ID号) $! # Shell本身的PID(即脚本运行的当前进程ID号 $$

  5. Qt开源作品5-仪表盘交互

    一.前言 Echart是百度研发团队开发的一款报表视图JS插件,功能十分强大,是本人用过的国产作品中最牛逼的,记得四五年前就在qt中使用过,当时用的浏览器控件是webkit,由于5.6以后的版本不再支 ...

  6. _findnext()调试中断,发生访问错误,错误定位到ntdll.dll

    问题: 采用_findfirst和_findnext获取指定的文件夹下的文件时,_findnext()函数在调试时发生中断,发生访问错误,错误定位到ntdll.dll.错误提示如下所示: _findn ...

  7. 基于Vue的前后段分离开发项目中<img :src />标签中引用vue的data属性中定义的图像地址失败的解决办法

    问题描述: 基于Vue的前后段分离开发项目中<img  :src />标签中引用vue的data属性中定义的图像地址失败,如下图所示: 解决办法: 修改后写法,加上require即可.如下 ...

  8. macOS安装编译pcl

    macOS安装编译pcl git clone git@github.com:PointCloudLibrary/pcl.git cd pcl brew install eigen brew insta ...

  9. 16. C++快速入门--模板和Concept

    待修改 1 定义模板 1.1 模板形参 模板参数 模板可以有两种参数, 一种是类型参数, 一种是非类型参数 这两种参数可以同时存在, 非类型参数 的类型 可以是 模板类型形参 template < ...

  10. Diary -「PKUSC 2022」浅谈一类 emo 文学在 OI 游记中的运用

      我突然发现这是我第一次完成这样一篇游记--   一篇记录了绝对意义上"爆炸"的游记.   SC 的前几天,我被一些奇怪的理由说服停课.省选已经过去了吧,机房里除了我全是省队.不 ...