首页 > TAG信息列表 > Prufer

prufer序列

prufer序列,一种把有标号树用唯一的整数序列表示。它可以将一个带标号\(n\)个结点的树用\(n-2\)个整数表示。 建立方法非常简单:每次找到无根树上编号最小的一个叶子,删掉它并记录它的父亲编号,重复\(n-2\)次,直到只剩下两个节点结束。 我们可以以线性的复杂度使一棵树在树和prufer序列

[学习笔记]卡特兰数/Prufer序列

1. 卡特兰数 卡特兰数常出现于组合数学/计数问题中 卡特兰数的前 $20$ 项是:$$1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, $$ $$16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190$$ 卡特兰数的通项公式是:(记第 $n$ 项卡特兰数为 $Cat_

【模板】prufer序列

什么是prufer序列 就是一个长度为\(n-2\)的序列,与\(n\)个点的有编号无根树形成双射。 在prufer序列中每个点出现其对应无根树度数减一次。 由树构造prufer序列? 每次选择一个编号最小的叶节点,删掉它并在序列中记录下它连接的那个节点,重复\(n-2\)次后只剩两个节点,算法结束。 用

树的计数

树的计数 已知每个点的度数,求满足条件的树的个数。 思路 对于无标号图的计数,考虑 \(prufer\) 序列。 注意到 \(prufer\) 序列的性质:在 \(prufer\) 序列中,顶点出现的次数就是其度数 \(-1\) 。于是,可以直接利用多重集的排列数得出结论: \(\displaystyle ans = \frac{(n-2)!}{(d_1-1)(

bzoj4766 文艺计算姬(完全二分图生成树计数)和一个拓展结论

A点集有\(n\)个点,B点集有\(m\)个点 考虑一棵生成树的prufer序列生成过程,最后剩下的两个点一定是一个在A点集,一个在B点集,也就是说\(n-1\)个A点集的点要被删去,\(m-1\)个B点集的点要被删去,prufer序列中要有\(n-1\)个B点集的点,\(m-1\)个A点集的点。 考虑对于一个长度为\(m-1\)的A点集

图论专题-学习笔记:Prufer 序列

目录1. 前言2. 详解2.1 树 \(\to\) Prufer 序列2.2 Prufer 序列 \(\to\) 树3. 性质4. 总结5. 参考资料 1. 前言 Prufer 序列,是一种用来描述树的序列,一般用于一些树上度数统计的题。 注意作者是 OIer,考虑到 Prufer 序列在 OI 里面的应用等,本篇文章目前只讲述 \(O(n \log n)\) 的求

prufer 序列浅谈

prufer 序列完成了从一棵大小为 \(n\) 的无根树到长度为 \(n-2\) 的序列的双射,下面简述其构造过程: 从一棵无根树到 prufer 序列: 我们找到其编号最小的叶子,然后删掉叶子,把其父亲加入队列。重复操作,直到整棵树剩下两个节点。 \(O(n\log n)\) 是显然可以做的,我们考虑如何 \(O(n)\)。

模板:Prufer序列

所谓 Prufer 序列,就是 Prufer 发明的序列。 (逃) 前言 优雅的神奇魔术。 看名字很高大难,但实际上是高大清(小清新)。 很简单的建立起树与序列之间的双射,且这个序列的性质非常良好,且这个序列的性质与度数密切相关。 能优雅简洁的证明一些恶心的结论。 解析 定义 把一棵树转化为

prufer序列总结

基础知识 \(prufer\) 序列是一种 \(n\) 个节点的有标号无根树与 \(n-2\) 的序列的双射关系 树转序列:每次选出编号最小的 叶节点,将其删去,并将其父亲加入序列,直到还剩两个点 线性构建: void T_P(){ for(int i=1;i<n;i++)fa[i]=read(),deg[fa[i]]++; for(int i=1,j=1;i<=n-2;i++,j++

prufer序列

目录$\operatorname{prufer}$序列定义构造无根树到序列序列到无根树性质与相关结论 \(\operatorname{prufer}\)序列 定义 一种无根树上的数列。 由顶点标号的无根树转化而来。且对于一棵确定的无根树,其对应的\(\operatorname{prufer}\)序列也是唯一确定的。 构造 无根树到序列 有

Prufer序列(坑)

个人理解 把一棵大小为 \(n\) 的有标号无根树映射到一个长为 \(n - 2\) 的数列上。 构造略(懒得写)。 性质 -1. 一个点的度数等于其在Prufer序列中的出现次数 + 1 。 -2. Prufer序列构造完后剩下两个点之一的其中一个必为 \(n\) 。 定理 Cayley 公式 凯莱公式:大小为 \(n\) 的不同

prufer 序列小记

(prufer 序列仅对 \(n>1\) 有效,\(n=1\) 一般要特判) prufer 序列是 \(n\) 个点的有标号无根树集合与 \(([1,n]\cap\Z)^{n-2}\) 的一种双射方式,可以将不会处理的树形结构转化为数组,在很多计数题里很有用。 下面先给出 prufer 序列的构造方式(即定义),然后给出通过任意长度为 \(n-2\) 每

牛客Contest11255 - 2021牛客暑期多校训练营4

Portal D - Rebuild Tree Description 给出一个\(n(n\leq5\times10^4)\)个点的树,从中删去\(k(k\leq100)\)条边,再任加\(k\)条边,使得其仍是一棵树,求方案数。 Solution prufer序列+推推推。 删去\(k\)​​条边之后树就变成了\(k+1\)​​个连通块,设每块的大小为\(s_i\)​​。把每一块

luogu P6086 【模板】Prufer 序列

题面传送门 这个东西主要用于生成树计数一类问题。 对于一个\(n\)个点的树,它的Prufer序列长度为\(n-2\)且这两者一一对应。 所以这个就很好解释了\(n\)个点生成树为\(n^{n-2}\)个。 一棵树转化成prufer序列是这样的: 找到一个编号最小的叶子节点,将这个叶子节点的父亲加入,并删除这

题解[CF1137F Matches Are Not a Child's Play]

题意: 给定一棵树,每个点有一个优先级,最开始为每个点的编号 每次选出最小优先级的叶结点并删除,得到一个删除序列 ( 即 \(prufer\) 序 ) 每次操作: \(up\) \(x\) 将树上 \(x\) 点的优先级变为全部点优先级的最大值 \(+1\) \(when\) \(x\) 查 \(x\) 点在当前删除序列中的位置 \(comp

Prufer 序列

定义与性质 \(\tt Prufer\) 序列用于建立起有标号无根树 / 有根树与序列的双射关系。 考虑对于一颗有标号无根树按如下方式生成一个长度为 \(n - 2\) 的序列(特别地,我们不考虑 \(n = 1\) 的情况): 找到树中的叶子节点当中编号最小的节点,将其在树上连接的点写在序列末尾,递归该操作。

[BZOJ]1005 [HNOI2008]明明的烦恼

题意 一棵树,给定每个点的度数,\(-1\)为无限制,求满足该度数的树的个数。 题解 prufer序列的裸题。 关于prufer序列,网上有更加详细的介绍,这里就不展开说明了,只介绍跟该题相关的性质。 所有无根树可以跟prufer序列形成双射。 一棵无根树,每个点在prufer序列出现的次数为它的度数减一。

Prufer 序列小记

前言 因为 这道题 滚过来学 Prufer 了 /kel Prufer序列 Prufer 序列是无根树的一种数列,可以将一个带标号的 \(n\) 点无根树用 \([1,n]\) 中的 \(n-2\) 个整数表示,即 \(n\) 点完全图的生成树与长度为 \(n-2\) 值域为 \([1,n]\) 的数列构成的双射。 一般用来解决一类树相关的计数问

组合数学(含二项式反演,特殊数列,置换群)

资料与前置知识 必备技能:数论 容斥计数部分已搬到:容斥&计数 当小球遇上盒子 组合基础 组合恒等式 \[nC(n,m)=mC(n-1,m-1) \]\[C(n,m)=C(n-1,m-1)+C(n-1,m) \]\[\sum_{0<=i<=n}C(n,i)=2^n \]\[\sum_{0<=i<=n}(-1)^i * C(n,i)=0 \]\[\sum_{m<=i<=n}C(i,m)=C(n+1,m+1) \]\[\sum_{0

7.25模拟总结

看A,认为是prufer序列,然而我prufer序列没有怎么练习,先跳过 B是个积性函数求和,然而min25筛忘记怎么写了。。。 C把无效状态搜出来应该就能过,但是我以为过不了就没写 想到了矩阵乘法想到了FFT想到了dp,就想不到矩乘+FFT+dp。。。 发现D是个原题。 最后写了C的5分快速幂。

prufer序列学习笔记

prufer序列学习笔记 定义 构造方法:每次删掉一个叶节点,将其父节点加入序列中。一共删n-2次,这样可以保证不重复。 性质 prufer序列与无根树一一对应 度数为\(d_i\)的节点在序列中出现\(d_i-1\)次 n个节点完全图的生成树个数为\(n^{n-2}\) 对于一颗无根树,度数序列给出,生成树个数为\(

prufer编码学习笔记

prufer 编码 对于一个无根树,他的 prufer 编码是这样确定的: 每次找到编号最小的一个叶子节点,也就是度数为\(1\)的节点,把和它相连的点,加入 prufer 编码序列的末尾,然后把这个点从树中删掉 如果当前树只有两个节点了,就停止 那么,通过给定的无根树求 prufer 编码就很简单了 比如下面这

BZOJ 1211: [HNOI2004]树的计数 prufer序列

直接套用 prufer 序列公式即可,但是要特判不合法的情况.  code:  #include <cstdio> #include <algorithm> #define ll long long #define N 200 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int bu[N]; void update(int x,int v

[Matrix-Tree][插值][容斥][prufer序列][DP]夕张的改造

源自 krydom 大爷的 FJ 省冬令营模拟赛题 Statement 给定一棵 \(n\) 个点的树和一个参数 \(k\) 每次操作可以选出树上的一条边删掉,然后再加一条边,使得操作之后还是一棵树 求 \(k\) 次操作能得到多少种不同的树,对 \(998244353\) 取模 \(n\le 50\)(原题数据范围) \(n\le 2000\)(加强

BZOJ 1005. [HNOI2008]明明的烦恼

prufer序列为无根树的一种数列。长度为 $n - 2$prufer转无根树将最小编号的叶子删去,prufer序列加入其父亲。重复至树只剩下两个节点。无根树转prufer取出prufer首元素,与待选点集中最小未出现在prufer序列中的点连边,并将该点在待选点集中删去,直至待选点集剩下两个节点,将这两个节点