【XSY2519】神经元 prufer序列 DP
题目描述
有\(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相关推荐
- [XXSY] 构树(prufer序列,树上连通块DP)
传送门 CayleyCayleyCayley公式:一个完全图有nn−2n^{n-2}nn−2棵无根生成树(可用prufer序列证明) 扩展CayleyCayleyCayley公式:被确定边分为大小为a ...
- 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- Prufer序列相关
最近做到一些题,用到了Prufer序列,挺有用的,在这里学习一下. 描述 Prufer数列是无根树的一种数列,通过一个Prufer序列可以唯一表示一棵顶点带标号的无根树,点数为n的树转化来的Prufe ...
- 模板:Prufer序列
所谓 Prufer 序列,就是 Prufer 发明的序列. (逃) 前言 优雅的神奇魔术. 看名字很高大难,但实际上是高大清(小清新). 很简单的建立起树与序列之间的双射,且这个序列的性质非常良好,且 ...
- 曼哈顿距离与切比雪夫距离的转化及prufer序列
目录 曼哈顿距离与切比雪夫距离的相互转化 prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2|+|y1−y2|=max(x1−x2+y1−y2,x1−x2−y1 ...
- Prufer序列 生成树定理
Description 在图论中,树的定义是连通且无环的无向图.对于一棵有 nn 个节点且节点从 11 到 nn 编号的树,它的 Prufer 序列是一个唯一的长为 n−2n−2 的标号序列. Pru ...
- 树的计数(prufer序列 或 purfer序列)
题解 首先我们要知道一条性质,prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下,其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按 ...
- 【XSY1295】calc n个点n条边无向连通图计数 prufer序列
题目大意 求\(n\)个点\(n\)条边的无向连通图的个数 \(n\leq 5000\) 题解 显然是一个环上有很多外向树. 首先有一个东西:\(n\)个点选\(k\)个点作为树的根的生成森林个数为: ...
- 【codevs1048】【codevs115406TG】石子归并、能量项链,序列dp的典型题目
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并 ...
最新文章
- Web项目开发性能优化解决方案
- 修改centos等linux的hostname-永久生效
- Vue.js 生产环境部署
- 搭建Servlet在线视频
- 《王者荣耀》又现登录异常 官方奉上皮肤碎片+战斗经验作补偿
- 基于汇编语言的贪吃蛇程序
- 累土--电容屏和电阻屏区别
- wav怎么转换成mp3?
- ccs: memory range overlaps existing memory range
- ffmpeg实战教程(十二)为视频添加/更换背景音乐
- html树形菜单折叠 css,JS+CSS简单树形菜单实现方法
- 代谢组学数据分析的统计学方法综述
- 调整分区后分区不见的数据找回法子
- 编译高博ORBSLAM2_with_pointcloud_map,用TUM数据集测试。
- IUV通信工程备赛该注意的事项
- 小程序登录、支付、上传图片流程
- 虚拟专用网的工作原理
- 什么是DWDM技术?
- python爬虫代码示例分享
- Google Chrome Extensions 最新精彩插件推荐