CF724F Uniformly Branched Trees

有根树可以统计。无根树难以统计。因为可以换根。

所以不让换根:只要两个无根树在重心位置不同构,就一定不同构

每个本质不同的树在重心位置统计上。

f[i][j][k]i个点根节点度数j,最大子树不超过k。枚举k大小的子树个数转移。

重心两个?

特殊考虑。两端f[n/2][d-1][n/2-1]=x,x*(x-1)/2+x

边界考虑到。

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=;
int mod,n,d;
int f[N][][N];
int jie[],inv[];
int qm(int x,int y){
int ret=;while(y){
if(y&) ret=(ll)ret*x%mod;x=(ll)x*x%mod;y>>=;
}return ret;
}
int dp(int i,int j,int k){
//cout<<" dp "<<i<<" "<<j<<" "<<k<<endl;
if(f[i][j][k]!=-) return f[i][j][k];
if(i==) {
if(j==d-||!j) return f[i][j][k]=;
return f[i][j][k]=;
}
if(i==){
if(k==&&j==) return f[i][j][k]=;
else return f[i][j][k]=;
}
if(j>i-) return f[i][j][k]=;
if(i>&&k==) return f[i][j][k]=; int C=;
int ret=;
int tmp=dp(k,d-,k-);
// cout<<" tmp "<<tmp<<" i j k "<<i<<" "<<j<<" "<<k<<endl;
for(reg m=;m<=j&&m*k<=i-;++m){
ret=(ret+(ll)dp(i-m*k,j-m,k-)*C%mod*inv[m]%mod)%mod;
C=(ll)C*(tmp-+m+)%mod;
}
//cout<<" ret "<<ret<<endl;
return f[i][j][k]=ret;
}
int main(){
rd(n);rd(d);rd(mod);
if(n<=){
puts("");return ;
}
memset(f,-,sizeof f);
jie[]=;
for(reg i=;i<=;++i) jie[i]=(ll)jie[i-]*i%mod;
inv[]=qm(jie[],mod-);
for(reg i=;i>=;--i) inv[i]=(ll)inv[i+]*(i+)%mod;
ll ans=;
ans=(ans+dp(n,d,(n-)/));
// cout<<"ans1 ------"<<ans<<endl;
if(n%==){
ll tmp=;
tmp=dp(n/,d-,n/-);
ans=(ans+(tmp*(tmp+)/%mod))%mod;
}
printf("%I64d",ans);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/3/3 18:21:10
*/

在某个位置为代表统计所有情况,

既可以不重不漏,还可以有的放矢

CF724F Uniformly Branched Trees的更多相关文章

  1. 【CF724F】Uniformly Branched Trees 动态规划

    [CF724F]Uniformly Branched Trees 题意:询问n个点的每个非叶子点度数恰好等于d的不同构的无根树的数目. $n\le 1000,d\le 10$. 题解:先考虑有根树的版 ...

  2. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) F - Uniformly Branched Trees 无根树->有根树+dp

    F - Uniformly Branched Trees #include<bits/stdc++.h> #define LL long long #define fi first #de ...

  3. 【CF724F】Uniformly Branched Trees

    题意:询问n个点的每个非叶子点度数恰好等于d的不同构的无根树的数目. n≤1000,d≤10n≤1000,d≤10. 题解: 这题真的是一道非常好的题 首先考虑有根树 定义f[i][j][k]表示i个 ...

  4. 「Codeforces 724F」Uniformly Branched Trees

    题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...

  5. 高考集训讲课(To 高一)

    高考集训讲课(To 高一) 主要是怕下午讲着讲着把自己讲懵了,有一定的迷糊概率 经过机房的讨论,一致认为插头\(DP\)实用性不大,所以这次不讲了,先把重要的讲一讲. 顺便吐槽一下,凭什么另外几个人都 ...

  6. 『正睿OI 2019SC Day6』

    动态规划 \(dp\)早就已经是经常用到的算法了,于是老师上课主要都在讲题.今天讲的主要是三类\(dp\):树形\(dp\),计数\(dp\),\(dp\)套\(dp\).其中计数\(dp\)是我很不 ...

  7. Todo List

    Contest 11.13 2016ACM/ICPC亚洲区青岛站(5/13, solved 7/13) Training 11.06 2016年中国大学生程序设计竞赛(合肥)(solved 6/10) ...

  8. [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划

    RRT是一种多维空间中有效率的规划方法.它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始 ...

  9. hud 1633 Orchard Trees 点是否在三角形内模板 *

    Orchard Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. 任务(task)

    任务概述 线程(Thread)是创建并发的底层工具,因此有一定的局限性(不易得到返回值(必须通过创建共享域):异常的捕获和处理也麻烦:同时线程执行完毕后无法再次开启该线程),这些局限性会降低性能同时影 ...

  2. 【JVM.8】类加载及执行子系统的案例与实战

    一. 案例分析 1. Tomcat:正统的类加载器架构 主流的Java Web服务器,如Tomcat.Jetty.WebLogic.WebSphere或其他服务器,都实现了自己定义的类加载器(一般都不 ...

  3. 时间复杂度O(n^2)和O(nlog n)差距有多大?

    0. 时间复杂度 接触到算法的小伙伴们都会知道时间复杂度(Time Complexity)的概念,这里先放出(渐进)时间复杂度的定义: 假设问题规模是\(n\),算法中基本操作重复执行的次数是\(n\ ...

  4. C_数据结构_循环队列

    # include <stdio.h> # include <malloc.h> typedef struct Queue { int * pBase; int front; ...

  5. rem、em、px、pt及网站字体大小设配

    rem:相对的只是HTML根元素字体尺寸; em:相对于当前对象内文本的字体尺寸(值不是固定且继承父级元素的字体大小); px像素(Pixel):对于显示器屏幕分辨率而言的; pt:point,是印刷 ...

  6. 个人阅读作业2—《No Silver Bullet: Essence and Accidents of Software Engineering》读后感

    在进行了一次结对编程.一次团队编程和一次个人编程项目后,读了<No Silver Bullet: Essence and Accidents of Software Engineering> ...

  7. 【个人博客作业Week7】软件工程团队项目一轮迭代感想与反思

    (发布晚原因:发到团队博客了 一.关于银弹 在佛瑞德·布鲁克斯于1986年发布的<没有银弹:软件工程的本质性与附属性工作>这篇软件工程的经典论文中,作者向我们讲述了软件工程没有银弹这样的理 ...

  8. 20135323符运锦----LINUX第二次实践:内核模块编译

    Linux实践二--模块 一.知识点总结 ①Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率 ...

  9. Leetcode——171.宝石与石头

    水题: 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符 ...

  10. Maven入门系列(一):Eclipse中使用Maven

    Maven下载和安装 在使用Maven之前首先先要下载Mavne的免安装包,下载地址:http://maven.apache.org/download.cgi 想看源码的可以下载src版本,使用的下载 ...