首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
二叉树 prufer序列
2024-09-05
uoj#335. 【清华集训2017】生成树计数(prufer序列+生成函数+多项式)
传送门 好神仙的题目--又一次有了做一题学一堆的美好体验 据说本题有第二类斯特林数+分治\(FFT\)的做法,然而咱实在看不懂写的是啥,题解贴这里,有兴趣的可以自己去瞅瞅,看懂了记得回来跟咱讲讲 前置芝士 \(prufer\)序列 \(prufer\)序列是个啥? 对于一棵无根树,我们找到它的标号最小的叶子,删去它,并记下与它相邻的节点的标号.重复这个过程直到树上的节点数为\(2\)为止.这个时候我们得到了一个长度为\(n-2\)的序列就是这棵无根树的\(prufer\)序列 很明显,每一棵无根
bzoj 1005 1211 prufer序列总结
两道题目大意都是根据每个点的度数来构建一棵无根树来确定有多少种构建方法 这里构建无根树要用到的是prufer序列的知识 先很无耻地抄袭了一段百度百科中的prufer序列的知识: 将树转化成Prufer数列的方法 一种生成Prufer序列的方法是迭代删点,直到原图仅剩两个点.对于一棵顶点已经经过编号的树T,顶点的编号为{1,2,...,n},在第i步时,移去所有叶子节点(度为1的顶点)中标号最小的顶点和相连的边,并把与它相邻的点的编号加入Prufer序列中,重复以上步骤直到原图仅剩2个顶点. 例子
bzoj1211: prufer序列 | [HNOI2004]树的计数
题目大意: 告诉你树上每个节点的度数,让你构建出这样一棵树,问能够构建出树的种树 这里注意数量为0的情况,就是 当 n=1时,节点度数>0 n>1时,所有节点度数相加-n!=n-2 可以通过通过除了根,必然有n-1个节点作为上一个节点的儿子来理解 然后通过学习prufer序列可知 每一颗树都能够建成唯一的序列,这里的n-2个数就是任意插入到prufer序列中,这很明显就是一个排列,那么之后就是计算 ans = (n-2)!/(w[1]!*w[2]!..w[n]!) w[i]表示i节点上的度数减
[BZOJ1211][HNOI2004]树的计数(Prufer序列)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1211 分析: 关于无根树的组合数学问题肯定想到Prufer序列,类似bzoj1005那题 说下prufer序列的性质: 1.一个无根树对应一个prufer序列 2.一个n个节点无根树对应的prufer序列长度为n-2 3.prufer序列中某节点出现的次数==这个节点在对应的无根树中度数-1 所以这题求无根树的数量等价于求prufer序列的数量. 注意无解的情况就行了.
树的计数 + prufer序列与Cayley公式 学习笔记
首先是 Martrix67 的博文:http://www.matrix67.com/blog/archives/682 然后是morejarphone同学的博文:http://blog.csdn.net/morejarphone/article/details/50677172 因为是偶然翻了他的这篇博文,然后就秒会了. prufer数列,可以用来解一些关于无根树计数的问题. prufer数列是一种无根树的编码表示,对于一棵n个节点带编号的无根树,对应唯一一串长度为n-1的prufer编码. (
BZOJ 1211 HNOI2004 树的计数 Prufer序列
题目大意:给定一棵树中全部点的度数,求有多少种可能的树 Prufer序列.详细參考[HNOI2008]明明的烦恼 直接乘会爆long long,所以先把每一个数分解质因数.把质因数的次数相加相减.然后再乘起来 注意此题无解须要输出0 当n!=1&&d[i]==0时 输出0 当Σ(d[i]-1)!=n-2时输出0 写代码各种脑残--竟然直接算了n-2没用阶乘-- #include<cstdio> #include<cstring> #include<iostre
prufer序列笔记
prufer序列 度娘的定义 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2. 对于一棵确定的无根树,对应着唯一确定的prufer序列 构造方法 无根树转化为prufer序列 找到编号最小的度数为\(1\)的点 删除该节点并在序列中添加与该节点相连的节点的编号 重复\(1,2\)操作,直到整棵树只剩下两个节点 如下图的prufer序列为\(3,5,1,3\) prufer序列转化为无根树
BZOJ1430小猴打架——prufer序列
题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架 的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打架之后,整个森林的小猴都会成为好朋友. 现 在的问题是,总共有多少种不同的打架过程. 比如当N=3时,就有{1-2,1-3}{1-2,2-3}{1-3,1-2}{1-3,2-3}{2-3,1 -2}{2-3,1-3}六种不同的打架过程. 输入 一个整数N,N<=10^6 输出 一行,方案数mod 9999991. 样例输入
【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}\)
prufer序列
介绍 其实是\(pr\ddot{u}fer\)序列 什么是prufer序列? 我们认为度数为\(1\)的点是叶子节点 有一颗无根树,每次选出编号最小的叶子节点,加到当前prufer序列的后面,然后删掉这个节点.直到剩下两个点为止. 这样会得到一个长度为\(n-2\),每个数都是\(1\text{~}n\)的序列. 可以看出,每棵无根树都对应唯一一个序列. 我们发现,所有叶子节点都不在prufer序列中,一个度数为\(d\)的点在prufer序列中的出现次数是\(d-1\). 那么怎样从一个pru
【BZOJ1211】【HNOI2004】树的计数 prufer序列
题目描述 给你\(n\)和\(n\)个点的度数,问你有多少个满足度数要求的生成树. 无解输出\(0\).保证答案不超过\({10}^{17}\). \(n\leq 150\) 题解 考虑prufer序列. 答案为 \[ \frac{(n-2)!}{\prod(d_i-1)!} \] 直接乘会爆long long,要转成\(n-1\)个组合数的乘积.当然你也可以分解质因数. 如果\(n\neq 1\)且\(d_i=1\),输出\(0\) 如果\(\sum d_i\neq 2n-2\),输出\(0\
【XSY1295】calc n个点n条边无向连通图计数 prufer序列
题目大意 求\(n\)个点\(n\)条边的无向连通图的个数 \(n\leq 5000\) 题解 显然是一个环上有很多外向树. 首先有一个东西:\(n\)个点选\(k\)个点作为树的根的生成森林个数为: \[ \binom{n}{k}\times n^{n-k-1}\times k \] 前面\(\binom{n}{k}\)是这些根的选编号的方案数,后面是prufer序列得到的:前面\(n-k-1\)个数可以是\(1\)~\(n\),第\(n-k\)个数是\(1\)~\(k\). 我的理解是:每个
prufer序列学习笔记
prufer序列是一个定义在无根树上的东西. 构造方法是:每次选一个编号最小的叶子结点,把他的父亲的编号加入到序列的最后.然后删掉这个叶节点.直到最后只剩下两个节点,此时得到的序列就是prufer序列. 这个构造可以用优先队列做到 $O(n\log n)$. 至于如何用prufer序列反推出树,我还有点没看懂怎么 $O(n\log n)$,以后看懂了再来填坑吧. prufer序列的一些性质: 一棵 $n$ 个点的无根树prufer序列长度为 $n-2$. 无根树和prufer序列一一对应,一个无
洛谷P5219 无聊的水题 I [prufer序列,生成函数,NTT]
传送门 思路 有标号无根树的计数,还和度数有关,显然可以想到prufer序列. 问题就等价于求长度为\(n-2\),值域为\([1,n]\),出现次数最多的恰好出现\(m-1\)次,这样的序列有哪些. 恰好\(m-1\)次不好求,变成最多\(m-1\)减去最多\(m-2\)的方案数. 考虑指数型生成函数.设要求的最多为\(M\),则设\(A(x)=\sum_{i=0}^M \frac{1}{i!}x^i\),答案就为\((n-2)![x^{n-2}]A^n(x)\),多项式快速幂即可. 代码 #
无根树的计数——prufer序列
参考博客https://www.cnblogs.com/dirge/p/5503289.html (1)prufer数列是一种无根树的编码表示,类似于hash. 一棵n个节点带编号的无根树,对应唯一串长度为n-2的prufer编码.所以一个n阶完全图的生成树个数就是. 首先定义无根树中度数为1的节点是叶子节点. 找到编号最小的叶子并删除,序列中添加与之相连的节点编号,重复执行直到只剩下2个节点. (2)prufer序列转化为无根树. 我们设点集为{1,2...n}.然后我们每次找到点集中没有出现
[学习笔记]prufer序列
前言 PKUWC和NOIWC都考察了prufer序列,结果统统爆零 prufer序列就是有标号生成树对序列的映射 prufer序列生成 每次选择编号最小的叶子删掉,把叶子的父亲加入prufer序列,直到剩下2个点 set维护叶子,nlogn prufer序列还原 用set维护没有在剩余prufer序列中的点,不断取出prufer序列首项A,和set中最小的编号连边.然后删除两个点.(如果A在剩下的prufer序列不存在了,就加入set) 摘自百度百科: 性质 来自:https://www.cnb
prufer序列计数的一些结论
\(prufer\)序列和完全图的生成树一一对应(考虑构造) 完全图的生成树个数为\(n^{n - 2}\) 满足第\(i\)个点的度数为\(d_i\)的生成树为\(\frac{n!}{\prod (d_i - 1) !}\) 把\(m\)个联通块,第\(i\)个大小为\(a_i\),连接起来的方案数为\(n^{m - 2} \prod a_i\) \(n\)个点,指定\(k\)个点在不同的树中,形成\(k\)个森林的方案数为\(k * n^{n - k - 1}\)
[LOJ#6044]. 「雅礼集训 2017 Day8」共[二分图、prufer序列]
题意 题目链接 分析 钦定 \(k\) 个点作为深度为奇数的点,有 \(\binom{n-1}{k-1}\) 种方案. 将树黑白染色,这张完全二分图的生成树的个数就是我们钦定 \(k\) 个点之后合法的方案数. 然后就和 BZOJ4766文艺计算姬 一致了,假设两边点集大小分别为 \(n,m\) ,生成树个数就是 \(n^{m-1}m^{n-1}\) 证明可以考虑 prufer 序列还原树时的操作,将所有点先放入 set 中,每次将没有出现在序列中的编号最小的点拿出来和 prufer 序列开头的
【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)
[BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<vector> using namespace std; #define ll lo
【BZOJ 1211】 1211: [HNOI2004]树的计数 (prufer序列、计数)
1211: [HNOI2004]树的计数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2468 Solved: 868 Description 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数. Input 第一行是一个正整数n,表示树有n个结点.第二行有n个数,第i个数表示di,即
【CF917D】Stranger Trees 树形DP+Prufer序列
[CF917D]Stranger Trees 题意:给你一棵n个点的树,对于k=1...n,问你有多少有标号的n个点的树,与给出的树有恰好k条边相同? $n\le 100$ 题解:我们先考虑容斥,求出和给出的树至少有k个点相同的树的数量.我们先选出原树中的k条边,然后剩下的边随便连.选出k条边后,原树被分成n-k个连通块,设其大小分别为$siz_1,siz_2...siz_{n-k}$.那么剩下的边随便连的方案数是多少呢?我们不妨把每个连通块看成一个点,答案变成n个点的完全图的生成树个数,根据P
热门专题
word查找和替换高级用法大全
gulp less 的css文件转rem
react 同步父子组件数据
semantic ui api验证重复
ubuntu qt应用程序崩溃看不到出错函数
oracle数据库telnet能通但访问不了数据库
k8s 查询service pod
理解CSS中的三种选择器>; ~
windwos server 2008r2 查看CPU温度
Linux在sda3的基础上扩展
js 高德删除 Marker -(CSDN)
unity 临时文件
wpf datagrid 虚拟化 分组
springboot控制台日志清理机制
ie.DocumentComplete模拟点击
保持--no-sandbox
c# 判断socket连接中断
卸载uu加速器虚拟网卡
matlab横坐标为字符
咋把C#的webView2的内核改成Chromium 内核