题目链接:http://codeforces.com/problemset/problem/724/F
题目大意:给定三个数n,d,mod,求有多少种n个点的不同构的树满足:除了度数为1的结点外,其余结点的度数均为d。答案对质数mod取模。
数据范围:1 ≤ n ≤ 1000, 2 ≤ d ≤ 10, 10^8 ≤ mod ≤ 10^9

题解:看到题目不难想到是树形dp。首先我们考虑有根树,f[i][j][k]表示有 i 个结点,根结点有 j 棵子树,每棵子树大小不超过k的方案数。有两种情况:
1.所有的子树大小都小于k,转移到f[i][j][k-1]。
2.有 l (l>0)棵子树大小为k,结果应为f[i-l*k][j-l][k-1]*C(f[k][d-1][k-1]+l-1,l)。注:C(X+l-1,l)表示从X种方案中选取 l 种,可以重复。
求出了有根树的方案数,我们需要转化成无根树。上述方案会重复计算答案的值,是因为同一棵树选取不同的结点作根时在 f 中表现出的状态是不同的,所以我们应该找到一个特殊的结点作为根,即树的重心,因为树的重心只有一个或两个。我们知道,对于一棵树的重心,它的子树大小不会超过n/2,所以答案为f[n][d][n/2]。而当一棵树有两个重心时,说明这棵树的重心的最大子树恰好有n/2(n为偶数)个点,此时应该减去重复(即两个重心在 f 中表示的状态不同时)的方案数C(f[n/2][d-1][n/2],2)。
最后,当n<=2时没有度数为d的点,此时特判一下就可以了。
时间复杂度O(n^2*d^2)

代码如下:

#include <algorithm>
#include <cstdio>
int f[1005][11][1005],g[1005][11],ine[11],n,d,mo;
int inv(int x)
{int i=1,y=mo-2;for (;y;y>>=1,x=1ll*x*x%mo)if (y&1) i=1ll*i*x%mo;return i;
}
int main()
{scanf("%d%d%d\n",&n,&d,&mo);for (int i=0;i<=n;i++) f[1][0][i]=1;for (int i=1;i<=d;i++) g[1][i]=1;for (int i=1;i<=d;i++) ine[i]=inv(i);for (int i=2;i<=n;i++){for (int j=1;j<=d;j++){for (int k=1;k<i;k++)for (int l=1;l<=j && l*k<=i;l++)f[i][j][k]=(f[i][j][k]+1ll*f[i-l*k][j-l][k-1]*g[k][l])%mo;for (int k=1;k<=n;k++) f[i][j][k]=(f[i][j][k]+f[i][j][k-1])%mo;}g[i][1]=f[i][d-1][n];for (int j=2;j<=d;j++)g[i][j]=1ll*g[i][j-1]*(f[i][d-1][n]+j-1)%mo*ine[j]%mo;}int ans;if (n<=2) ans=1;else ans=f[n][d][n/2];if (n>2 && !(n&1))ans=(ans-1ll*(f[n/2][d-1][n/2]-1)*f[n/2][d-1][n/2]%mo*ine[2]%mo+mo)%mo;printf("%d\n",ans);
}

codeforces 724F. Uniformly Branched Trees相关推荐

  1. CF724F Uniformly Branched Trees

    CF724F Uniformly Branched Trees 有根树可以统计.无根树难以统计.因为可以换根. 所以不让换根:只要两个无根树在重心位置不同构,就一定不同构 每个本质不同的树在重心位置统 ...

  2. Codeforces 596D Wilbur and Trees

    http://codeforces.com/contest/596/problem/D 题目大意: 有n棵树排成一排,高度都为h. 主人公要去砍树,每次等概率地随机选择没倒的树中最左边的树或者最右边的 ...

  3. codeforces 711 C. Coloring Trees (dp)

    题目:http://codeforces.com/group/1EzrFFyOc0/contest/711/problem/C 题意:有n棵树,m种颜料,部分树有初始颜色,如为0,则没有初始颜色,给树 ...

  4. Codeforces 596D Wilbur and Trees dp (看题解)

    一直在考虑, 每一段的贡献, 没想到这个东西能直接dp..因为所有的h都是一样的. #include<bits/stdc++.h> #define LL long long #define ...

  5. Nature Milestones | 近20年人类癌症研究领域14项里程碑式进展!

    导 读  癌症目前仍然是全世界人类最大的杀手之一.近日,Nature Genetics和Nature Medicine联合发表了"Nature Milestones in Cancer&qu ...

  6. 图解近300年人类抗癌史

    据资料显示,全中国每6分钟就有一人被确诊为癌症,每天有8550人成为癌症患者,每七到八人中就有一人死于癌症.未来10年,中国的癌症发病率与死亡率仍将继续攀升.目前癌症已成为人类健康第一杀手,人们无不& ...

  7. Codeforces Beta Round #9 (Div. 2 Only) D. How many trees? dp

    D. How many trees? 题目连接: http://www.codeforces.com/contest/9/problem/D Description In one very old t ...

  8. CodeForces - 1529E Trees of Tranquillity(贪心+线段树)

    题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...

  9. Codeforces Round #331 (Div. 2) D. Wilbur and Trees 记忆化搜索

    D. Wilbur and Trees Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/596/p ...

  10. # Codeforces Round #548 (Div. 2)C Edgy Trees

    Codeforces Round #548 (Div. 2)C Edgy Trees 题目传送门 You are given a tree (a connected undirected graph ...

最新文章

  1. JavaSE的一些基础内容
  2. 每天读一遍,不久你就会变!
  3. 记-python中socket服务器设置中的setsockopt
  4. 读jQuery源码释疑笔记
  5. Python 爬虫小程序(正则表达式的应用)
  6. hadoop生态搭建(3节点)-10.spark配置
  7. CodeForces 1506C(暴力求最长连续子串) acm寒假集训日记21/12/31or22/1/1
  8. NB-IoT(9)---云平台对接及使用
  9. 扑捉和捕捉的区别照相_3种摄影中捕捉动作的基本方法
  10. 怎么修改远程服务器的地址,怎么修改远程服务器的地址
  11. win10远程计算机或设备将不接收连接?
  12. 文本文档如何运行c语言代码,C程序员如何创建、打开、关闭文本文件或二进制文件...
  13. ArcGis如何插入图片_如何在CAD图纸中以OLE形式插入图片?
  14. 计算机网络第五版谢希仁答案
  15. 《水经注全国离线地图5.1》升级至5.2
  16. 什么叫做SQL注入式攻击,如何防范?
  17. 打开应用时出现“你的手机上未安装应用程序”--实际上该应用已经安装的解决方案
  18. yota3墨水屏设置_【YotaPhone2 手机使用总结】墨水屏|操作|桌面投射|第三方_摘要频道_什么值得买...
  19. 计算机管理无法启用,无法打开计算机管理怎么办 打开计算机管理的方法
  20. ASP.net的ItemDataBound事件与LinqToSql数据源关于e.Item.DataItem的类型

热门文章

  1. react动态添加背景图片/不同内容添加对应背景
  2. C语言和python实现——公鸡5文钱一只, 母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡
  3. 前端面试 - css , 布局 ,js ,vue
  4. oracle delete一直没有结束怎么办 教你跟踪delete和rollback进度之-《delete跟踪篇》
  5. 3.Adaptive AUTOSAR 架构详解
  6. 哪个大学开python课_2017春Python语言程序设计(天津大学仁爱学院)
  7. 毕业设计开题报告撰写方法
  8. 程序猿之国庆有空吗?
  9. 电脑网络问题,IP释放,重新获取IP
  10. 由于哈希冲突,不同值的对象也可能具有相同的哈希值