【Codeforces】 CF917D Stranger Trees

题目链接

CF方向
Luogu方向

题目解法

一个显然的转化是:恰好 k k k 条边不好求,所以把 恰好 转化成 至少,然后进行二项式反演
f i f_i fi 为恰好 k k k 条边 . . . ... ... g i g_i gi 为至少 k k k 条边 . . . ... ...
那么 f i = ∑ j = i n − 1 g j ( − 1 ) j − i ( j i ) f_i=\sum\limits_{j=i}^{n-1}g_j(-1)^{j-i}\binom{j}{i} fi=j=in1gj(1)ji(ij)
这一部分的时间复杂度是 O ( n 2 ) O(n^2) O(n2)

考虑求解 g g g,可以发现保留的边数和连通块个数是可以对应的,所以接下来只对连通块考虑
这里有一个结论是:如果 m m m 个连通块的大小分别是 s i z 1 , s i z 2 , . . . , s i z m siz_1,siz_2,...,siz_m siz1,siz2,...,sizm,且每个点都有编号,则把它们构成生成树的方案数为 n m − 2 ∏ s i z i n^{m-2}\prod siz_i nm2sizi
证明可以见 oiwiki-prufer 中的 图连通方案数

我们发现直接把上面的式子进行 d p dp dp 的时间复杂度是 O ( n 3 ) O(n^3) O(n3) 的,即令 d p i , j , k dp_{i,j,k} dpi,j,k 表示在 i i i 的子树中选出了 j j j 个连通块, i i i 所在连通块有 k k k 个点的方案数

我们考虑 ∏ s i z i \prod siz_i sizi 的组合意义,即在每个连通块中选出一个点的方案数
这样就可以令 d p i , j , 0 / 1 dp_{i,j,0/1} dpi,j,0/1 表示在 i i i 的子树中,选出了 j j j 个连通块, i i i 所在连通块是否选过点的方案数
转移比较好转移,根据背包 d p dp dp 的时间复杂度分析,可以做到 O ( n 2 ) O(n^2) O(n2)

#include <bits/stdc++.h>
using namespace std;
const int N=110,P=1e9+7;
typedef long long LL;
int n,g[N],f[N],C[N][N];
int dp[N][N][2],t[N][2],siz[N];
int e[N<<1],ne[N<<1],h[N],idx;
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
inline void inc(int &x,LL y){x=(x+y)%P;if(x<0) x+=P;
}
void dfs(int u,int fa){dp[u][1][0]=dp[u][1][1]=1,siz[u]=1;for(int i=h[u];~i;i=ne[i]){int v=e[i];if(v==fa) continue;dfs(v,u);for(int j=1;j<=siz[u]+siz[v];j++) t[j][0]=t[j][1]=0; for(int j=1;j<=siz[u];j++) for(int k=1;k<=siz[v];k++){inc(t[j+k][0],1ll*dp[u][j][0]*dp[v][k][1]);inc(t[j+k][1],1ll*dp[u][j][1]*dp[v][k][1]);inc(t[j+k-1][0],1ll*dp[u][j][0]*dp[v][k][0]);inc(t[j+k-1][1],(1ll*dp[u][j][0]*dp[v][k][1]+1ll*dp[u][j][1]*dp[v][k][0]));}siz[u]+=siz[v];for(int j=1;j<=siz[u];j++) dp[u][j][0]=t[j][0],dp[u][j][1]=t[j][1];}
}
void add(int x,int y){ e[idx]=y,ne[idx]=h[x],h[x]=idx++;}
int qmi(int a,int b){if(b<0) return qmi(a,P-2);int res=1;for(;b;b>>=1){if(b&1) res=1ll*res*a%P;a=1ll*a*a%P;}return res;
}
int main(){n=read();memset(h,-1,sizeof(h));for(int i=1;i<n;i++){int x=read(),y=read();add(x,y),add(y,x);}dfs(1,-1);for(int i=1;i<=n;i++) g[n-i]=1ll*dp[1][i][1]*qmi(n,i-2)%P;C[0][0]=1;for(int i=1;i<=n;i++) for(int j=0;j<=i;j++) C[i][j]=(!j||i==j)?1:(C[i-1][j-1]+C[i-1][j])%P;for(int i=0;i<n;i++)for(int j=i,neg=1;j<n;j++,neg*=-1)inc(f[i],1ll*g[j]*neg*C[j][i]);for(int i=0;i<n;i++) printf("%d ",f[i]);puts("");fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}
/*
f[i][j][0/1]: 在i的子树中,分成了j个连通块,i连通块内是否选过的方案数
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 20.04二进制部署Nightingale v6.1.0和Prometheus

sudo lsb_release -r可以看到操作系统版本是20.04&#xff0c;sudo uname -r可以看到内核版本是5.5.19。 sudo apt-get update进行更新镜像源。 完成之后&#xff0c;如下图&#xff1a; sudo apt-get upgrade -y更新软件。 选择NO&#xff0c;按下Enter。 完成如下&…

自定义注解实现Redis分布式锁、手动控制事务和根据异常名字或内容限流的三合一的功能

自定义注解实现Redis分布式锁、手动控制事务和根据异常名字或内容限流的三合一的功能 文章目录 [toc] 1.依赖2.Redisson配置2.1单机模式配置2.2主从模式2.3集群模式2.4哨兵模式 3.实现3.1 RedisConfig3.2 自定义注解IdempotentManualCtrlTransLimiterAnno3.3自定义切面Idempote…

问题记录 springboot 事务方法中使用this调用其它方法

原因: 因为代理对象中调用了原始对象的toString()方法,所以两个不同的对象打印出的引用是相同的

快速将iPhone大量照片快速传输到电脑的办法!

很多使用iPhone 的朋友要将照片传到电脑时&#xff0c;第一时间都只想到用iTunes 或iCloud&#xff0c;但这2个工具真的都非常难用&#xff0c;今天小编分享牛学长苹果数据管理工具的照片传输功能&#xff0c;他可以快速的将iPhone照片传输到电脑上&#xff0c;并且支持最新的i…

OpenCV实现模板匹配和霍夫线检测,霍夫圆检测

一&#xff0c;模板匹配 1.1代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei]#图像和模板的读取 img cv.imread("cat.png") template cv.imread(r"E:\All_in\o…

【vue3】项目搭建

目录 简介脚手架引入axios引入sass引入element-plusvite.config.js路由配置全局状态管理完整main.js组合式API之Setup 简介 vue3&#xff1a;双向绑定改为ES6的Proxy&#xff1b;新的API风格&#xff0c;代码逻辑性更强、更易维护&#xff1b;性能提升&#xff0c;渲染更快、内…

JavaScript:立即执行函数

一、JS立即执行函数模式是一种语法&#xff0c;可以让你的函数在定义后立即被执行&#xff0c;这种模式本质上就是函数表达式&#xff08;命名的或者匿名的&#xff09;&#xff0c;在创建后立即执行。 两种常见写法&#xff1a; 匿名函数包裹在一个括号运算符中&#xff0c;…

【数据库系统概论】关系数据库中的关系完整性

前言实体完整性参照完整性用户定义的完整性SQL Server中常用的完整性约束感谢 &#x1f496; 前言 按照数据模型的三大要素&#xff0c;关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。本篇文章将介绍这三部分内容中的第三部分即关系完整性。关于前两部分可…

Linux嵌入式串口UART测试程序

Linux串口UART测试程序&#xff0c;收到什么&#xff0c;打印什么。 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<sys/signal.h> #include<fcntl.h> #include&l…

uniapp js 合成canvas画布

代码 <template><view><canvas canvas-id"canvas" class"canvas-c"></canvas><!-- <h1>999</h1> --></view> </template><script>export default {name: sharePos,props: {// 绘制图片的尺寸…

配置OSPF路由

OSPF路由 1.OSPF路由 1.1 OSPF简介 OSPF(Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;路由协议是另一个比较常用的路由协议之一&#xff0c;它通过路由器之间通告网络接口的状态&#xff0c;使用最短路径算法建立路由表。在生成路由表时&#xff0c;…

亚马逊无线鼠标FCC认证办理 FCC ID

无线鼠标是指无线缆直接连接到主机的鼠标&#xff0c;采用无线技术与计算机通信&#xff0c;从而省却电线的束缚。通常采用无线通信方式&#xff0c;包括蓝牙、Wi-Fi (IEEE 802.11)、Infrared (IrDA)、ZigBee (IEEE 802.15.4)等多个无线技术标准。随着人们对办公环境和操作便捷…

RSS订阅

RSS订阅是一种内容聚合的工具&#xff0c;它可以帮助你聚合、分类、整理日常大量信息。以下是使用RSS订阅的一些好处&#xff1a; 获取更新信息&#xff1a;当你订阅了某个网站或者主题&#xff0c;每当有新的内容更新&#xff0c;你都会第一时间收到通知。提高阅读效率&#…

如何有效的进行服务器稳定性测试?

服务器稳定性是最重要的&#xff0c;如果在稳定性方面不能够保证业务运行的需要&#xff0c;再高的性能也是无用的。 正规的服务器厂商都会对产品进行不同温度和湿度下的运行稳定性测试。重点要考虑的是冗余功能&#xff0c;如&#xff1a;数据冗余、网卡冗余、电源冗余、风扇冗…

Vue中动态树形菜单,以及

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

Leetcode205. 同构字符串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0…

CTP:关于cc和bindgen库及rust工程组织

有三个工程目录&#xff0c;cpt-api, ctp-sdk,ctp-strategy 1、ctp-sdk&#xff1a; 主要的目的是基于bindgen库生成与cpp的.h文件相对应一个binding.rs文件&#xff0c;后面供策略使用。 在这个目录下&#xff0c;建一个build.rs,用bindgen库生成cpp.h的头文件相应的rust绑定…

蓝桥杯每日一题2023.9.29

蓝桥杯大赛历届真题 - C&C 大学 B 组 - 蓝桥云课 (lanqiao.cn) 题目描述1 题目分析 看见有32位&#xff0c;我们以此为入手点&#xff0c; B代表字节1B 8b b代表位&#xff0c;32位即4个字节 (B) 1KB 1024B 1MB 1024KB (256 * 1024 * 1024) / 4 67108864 故答案…

redis主从从,redis-7.0.13

redis主从从&#xff0c;redis-7.0.13 下载redis安装redis安装redis-7.0.13过程报错1、没有gcc&#xff0c;报错2、没有python3&#xff0c;报错3、[adlist.o] 错误 127 解决安装报错安装完成 部署redis 主从从结构redis主服务器配置redis启动redis登录redisredis默认是主 redi…

[JAVA]黑马程序员文字打斗游戏复现

author:&Carlton language:JAVA website: b站黑马程序员 黑马程序员 JAVA 2022斯坦福大学合集面向对象程序设计练习题 目录 Role类 RoleTest类 Role类 package com.itheima.demo2;import java.util.Random;public class Role {private String name;private String fac…