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


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

\[\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. docker-compose固定网段设置

    docker-compose在使用的时候,经常是多个docker组了个内网.而如果不指定内网地址的话,很容易和线下的网段冲突,会造成虽说外部IP和端口都映射好了,但是就是公网无法访问的情况. 解决方案 ...

  2. [WPF UI] 为 AvalonDock 制作一套 Fluent UI 主题

    AvalonDock 是我这些天在为自己项目做技术选型时发现的一个很好的开源项目,它是一个用于 WPF 的布局控件库,可以帮助我们实现类似 Visual Studio 的布局效果.因为它自带的一些样式 ...

  3. aspirate 工具

    dotnet tool aspirate https://www.nuget.org/packages/aspirate/0.1.40-preview 作为全局工具安装 dotnet tool ins ...

  4. zz 为什么我更喜欢 Python 的 Storm ORM

    为什么我更喜欢 Python 的 Storm ORM - @emacsway 的博客 很有意思的讨论.可能还是 mapping 比较实用. 另外,文中称赞有加的 Identity Map 并不适合并发 ...

  5. 关于 K8s 的一些基础概念整理-补充【k8s系列之五】

    〇.前言 本文继续整理下 K8s 的一些基础概念,作为前一篇概念汇总的补充. 前一篇博文链接:https://www.cnblogs.com/hnzhengfy/p/k8s_concept.html. ...

  6. docker limit

    我给docker的systemd

  7. error LNK2038: 检测到“_MSC_VER”的不匹配项问题

    _MSC_VER这个相当于做了宏的检测 _MSC_VER 定义编译器的版本. 一些编译器版本的_MSC_VER值:MS VC++ 14.0 _MSC_VER = 1900 vs2015MS VC++ ...

  8. MCU命令

    三D打印常用MCU命令 allocate_oids count=42 分配 42 个 OIDs,后续用于标识和管理不同的设备或组件 config_spi oid=0 pin=PD7 cs_active ...

  9. 修改led-core.c 让led的delay_on和delay_off时间不会应为trigger配置改版而重置为1HZ

    先列一下leds trigger的设置流程 echo none > trigger 的流程 led_trigger_set() | led_stop_software_blink() echo ...

  10. IDEA集成Docker控制台日志乱码问题解决

    IDEA工具栏 → HELP → Edit Custom VM Options... 文件尾部添加一行 -Dfile.encoding=utf-8 重启IDEA即可