题目描述

  有\(n\)点,每个点有度数限制,\(\forall i(1\leq i\leq n)\),让你选出\(i\)个点,再构造一棵生成树,要求每个点的度数不超过度数限制。问你有多少种方案。

  \(n\leq 100\)

题解

  考虑prufer序列。

  每个prufer序列唯一对应一棵无根树。

  设\(f_{i,j,k}\)为前\(i\)个点选了\(j\)个点,目前的prufer序列长度为\(k\)的方案数。

  每次枚举下一个点选不选和度数

  不选:\(f_{i+1,j,k}+=f_{i,j,k}\)

  选,度数为\(l\):\(f_{i+1,j+1,k+l-1}+=f_{i,j,k}\times\binom{k+l-1}{k}\)

  答案为\(f_{n,i,i-2}\)

  时间复杂度:\(O(n^4)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
ll p=1000000007;
ll c[110][110];
ll f[110][110][110];
int d[110];
void add(ll &a,ll b)
{a=(a+b)%p;
}
int main()
{int n;scanf("%d",&n);int i,j,k,l;for(i=1;i<=n;i++)scanf("%d",&d[i]);for(i=0;i<=n;i++){c[i][0]=1;for(j=1;j<=i;j++)   c[i][j]=(c[i-1][j]+c[i-1][j-1])%p;}f[0][0][0]=1;for(i=0;i<n;i++)for(j=0;j<=i;j++)for(k=0;k<=n-2;k++)if(f[i][j][k]){add(f[i+1][j][k],f[i][j][k]);for(l=0;l<=d[i+1]-1&&k+l<=n-2;l++)add(f[i+1][j+1][k+l],f[i][j][k]*c[k+l][k]);}printf("%d\n",n);for(i=2;i<=n;i++)printf("%lld\n",f[n][i][i-2]);return 0;
}

转载于:https://www.cnblogs.com/ywwyww/p/8512249.html

【XSY2519】神经元 prufer序列 DP相关推荐

  1. [XXSY] 构树(prufer序列,树上连通块DP)

    传送门 CayleyCayleyCayley公式:一个完全图有nn−2n^{n-2}nn−2棵无根生成树(可用prufer序列证明) 扩展CayleyCayleyCayley公式:被确定边分为大小为a ...

  2. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  3. Prufer序列相关

    最近做到一些题,用到了Prufer序列,挺有用的,在这里学习一下. 描述 Prufer数列是无根树的一种数列,通过一个Prufer序列可以唯一表示一棵顶点带标号的无根树,点数为n的树转化来的Prufe ...

  4. 模板:Prufer序列

    所谓 Prufer 序列,就是 Prufer 发明的序列. (逃) 前言 优雅的神奇魔术. 看名字很高大难,但实际上是高大清(小清新). 很简单的建立起树与序列之间的双射,且这个序列的性质非常良好,且 ...

  5. 曼哈顿距离与切比雪夫距离的转化及prufer序列

    目录 曼哈顿距离与切比雪夫距离的相互转化 prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2|+|y1−y2|=max(x1−x2+y1−y2,x1−x2−y1 ...

  6. Prufer序列 生成树定理

    Description 在图论中,树的定义是连通且无环的无向图.对于一棵有 nn 个节点且节点从 11 到 nn 编号的树,它的 Prufer 序列是一个唯一的长为 n−2n−2 的标号序列. Pru ...

  7. 树的计数(prufer序列 或 purfer序列)

    题解 首先我们要知道一条性质,prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下,其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按 ...

  8. 【XSY1295】calc n个点n条边无向连通图计数 prufer序列

    题目大意 求\(n\)个点\(n\)条边的无向连通图的个数 \(n\leq 5000\) 题解 显然是一个环上有很多外向树. 首先有一个东西:\(n\)个点选\(k\)个点作为树的根的生成森林个数为: ...

  9. 【codevs1048】【codevs115406TG】石子归并、能量项链,序列dp的典型题目

    1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并 ...

最新文章

  1. Web项目开发性能优化解决方案
  2. 修改centos等linux的hostname-永久生效
  3. Vue.js 生产环境部署
  4. 搭建Servlet在线视频
  5. 《王者荣耀》又现登录异常 官方奉上皮肤碎片+战斗经验作补偿
  6. 基于汇编语言的贪吃蛇程序
  7. 累土--电容屏和电阻屏区别
  8. wav怎么转换成mp3?
  9. ccs: memory range overlaps existing memory range
  10. ffmpeg实战教程(十二)为视频添加/更换背景音乐
  11. html树形菜单折叠 css,JS+CSS简单树形菜单实现方法
  12. 代谢组学数据分析的统计学方法综述
  13. 调整分区后分区不见的数据找回法子
  14. 编译高博ORBSLAM2_with_pointcloud_map,用TUM数据集测试。
  15. IUV通信工程备赛该注意的事项
  16. 小程序登录、支付、上传图片流程
  17. 虚拟专用网的工作原理
  18. 什么是DWDM技术?
  19. python爬虫代码示例分享
  20. Google Chrome Extensions 最新精彩插件推荐

热门文章

  1. 【Matplotlib】【Python】如何使用matplotlib颜色映射
  2. 2021最新全球CS专业排名发布,CMU再夺榜首,清华和MIT并列
  3. 最全深度学习资源列表!
  4. HALCON学习之旅(四)
  5. oracle manager 配置,Oracle Net Manager 基本配置
  6. 软考高级网络规划设计师论文考试技巧
  7. Navicat premium查看数据库表中文注释的两种方式
  8. jQuery(一)、核心
  9. python2.7入门---内置函数
  10. 微信小程序实现文字跑马灯