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


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

\[\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. 解析JDBC使用查询MySQL【非流式、流式、游标】

    解析JDBC使用游标查询MySQL 使用jdbc查询MySQL数据库,如果使用游标或者流式查询的话,则可以有效解决OOM的问题,否则MySQL驱动就会把数据集全部查询出来加载到内存里面,这样在大数据的 ...

  2. VLC web(http)控制 (2) 状态获取

    VLC 状态通过http://127.0.0.1:8080/requests/status.xml获取.(IP地址自行更换) 内容如下: <root> <fullscreen> ...

  3. Shiro简单入门+个人理解(2)

    今天开始了Shiro认证及授权的部分,认证及授权是Shiro的主要功能,虽然Shiro还具有加密等功能,但在实际开发时,很少会使用到,在公司一般都有自己的一套加密方式,具体我就不说话了,毕竟有保密协议 ...

  4. 2000 Star,是时候为我的开源项目更新下功能了

    哈喽啊,我是阿朗,马上就要年末了,已经半年多没有更新文章了.年初定的计划早已经忘的一干二净.再不捡起来一点东西,就要2025年了. 要写点东西了. 你是一个博客撰写专家,你擅长开发领域,你喜欢使用通俗 ...

  5. 如何在BASH中将制表符分隔值(TSV)文件转换为逗号分隔值(CSV)文件?(How do I convert a tab-separated values (TSV) file to a comma-separated values (CSV) file in BASH?)

    我有一些TSV文件需要转换为CSV文件. BASH中是否有任何解决方案,例如使用awk来转换这些?我可以这样使用sed,但担心它会出错: sed 's/\t/,/g' file.tsv > fi ...

  6. Mac中nginx的默认安装路径和启动方式

    1.安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/etc/nginx/nginx.conf (配置文件路径) /usr/local/var/www (服务器默认路径) / ...

  7. Sealos Devbox 基础教程:使用 Cursor 从零开发一个代码猜古诗小游戏

    给你一段代码,让你根据代码来猜对应的古诗词,你能猜对吗? 这不是玩笑,还真有人这么干 这是一张在 1024 程序员节流传的代码猜诗句小游戏,相信很多程序员小朋友都看到过. 今天我们将用魔法打败魔法,通 ...

  8. Docker使用:利用宝塔面板Docker管理器快速搭建PHP、Java、Python、nodejs等配套运行环境

    思路:阿里云购买服务器选择centos7宝塔系统做宿主机,登录宝塔安装Docker管理器,获取一个centos7镜像,创建容器在里面再安装个宝塔后部署PHP.Python等. 点击购买阿里云云服务器, ...

  9. vue基础1

    vue的特点:易用,灵活,高效: 渐进式:根据需求的不同加载不同的模块: vue核心:数据驱动,组件化: 注意 1.挂在不能绑定在html和body上 2.要绑定到页面唯一的元素上,也就是绑定到id ...

  10. k8s列出所有未配置探针的deployment

    在 Kubernetes 中,探针(Probes)用于检测容器的健康状态,主要包括以下三种: Liveness Probe(存活探针):检测容器是否正在运行. Readiness Probe(就绪探针 ...