我们经常干的一件事是把数变为关于图的问题来解决,那么久了未免不会有这个疑问:能不能把图变成数来解决问题?

所以有了这个purfer数列。

介绍一下这个数列有什么用(或者说有什么性质):

  1. 能够将一棵无根树转化成一个数列,且按这种编码数列具有唯一性

2.给定一purfer数列,可以还原出原来的无根树,且有且仅有一种方法。

那么这个数列是怎么形成的呢?下面来大概叙述一下整个过程:

(1) 生成数列:

选取此时树上编号最小的叶子节点,删除此节点且将此节点所连接的节点加入数列末端

不断的重复上述操作,直到只剩两个节点时停止该操作。

(所以一个purfer序列的长度应为n-2)

(2)还原无根树:

设集合A = {1,2,3,...... ,n-1, n}

设purfer数列 a1, a2, ...... , an

顺次选出purfer数列首位元素,然后在集合A中选出另一元素与它相连边

选出元素需满足一下特点:

① 该元素此时不能在purfer序列中

② 该元素此时应在集合A中

③ 满足以上两条件的最小元素

不断进行以上操作,知道purfer数列为空,此时A集合必然存在两个元素,最后将这两个元素连接起来,则此无根树还原完毕。

具体样例如下:

purfer编码为 1 2 2

那么来思考几个问题:

(1) 为什么此方法能够还原?

我认为可以这样想,首先(用上面的例子来说),你是先删除了一个点3,然后再把这个点所连的一个点1加入purfer的。那么显然你这个点3一定不在是、此时的purfer中,对吧?同样的道理,无论什么时候,你purfer的首位所连接的数一定不在后面的队列中(因为你要先删除他,然后再把这个数所连接的数加入purfer),而由于我们每次都找的是编号最小的数,所以我们把有可能的数中找出最小数就好了,就能够唯一确定了。而由于每个数最多只能被删一次,所以A集合中的数用完之后就要删去,他也只能被用一次。所以purfer中一共有n-2个数,就有n-2次操作,就连了n-2条边。而你最后仅剩下的两个数有且仅有一种选择就是连最后一条边,所以综上就是n个点,连接n-1条边,这必然就是一棵树了。

(2)这样还原的一个特殊性质:(虽然说是无根树,我们假设它初具树形233,就是假装有儿子和父亲节点)

有观察可以得到,如果说一个点本来就是叶节点,那么他就悲剧了,他一来就直接被删了,根本就没有机会进入purfer;而如果像图中的节点1就要稍稍幸运一些,他要在节点3被删了以后才被删,而节点3被删时他就可以进入一次purfer数列;那么一个点什么时候会被删呢? 当然是他是叶子节点的时候,也就是度为1的时候;那么怎么才能成为叶子节点?很简单,你的周围所连接的其他儿子点都被解决之后你就成为了叶子节点;换句话说,假设你周围有n个儿子节点,那么你就有n次进入purfer的机会,再进一步就可以得到一个很重要的结论:一个点的度数 = 它在purfer中出现的次数 + 1(它和父节点的连边)

Purfer序列的更多相关文章

  1. BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数

    1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  2. bzoj1004 purfer 序列

    之前没不知道这个数列. 一个purfer序列与一棵树一一对应. 长度为n的purfer的集合: A = { s | s is a sequence and a∈[1,len(s)+2] 一个直接的结论 ...

  3. BZOJ 1211 树的计数(purfer序列)

    首先考虑无解的情况, 根据purfer序列,当dee[i]=0并且n!=1的时候,必然无解.否则为1. 且sum(dee[i]-1)!=n-2也必然无解. 剩下的使用排列组合即可推出公式.需要注意的是 ...

  4. purfer序列题表

    purfer序列是对于带编号(互不相同)的无根树进行编码得到的,对于同样的n个顶点,其有n-2项,有n^(n-2)种,而且每种都合法(如果只要求他是一棵树的话)(可以通过证明翻译过程维持了各部分的树的 ...

  5. HNOI2008 明明的烦恼 (purfer序列 + 组合数学)

    传送门 这道题题意描述很清楚,不过我自己做的时候确实是一头雾水……又看了题解,发现要用到一个新知识,叫purfer序列. 我们来简单说一下什么是purfer序列.它可以被看作一种树的表现形式.一棵含有 ...

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

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

  7. bzoj 1211: [HNOI2004]树的计数 -- purfer序列

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MB Description 一个有n个结点的树,设它的结点分别为v1, v2, ...

  8. BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合

    1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...

  9. BZOJ1000-1099板刷计划+一句话题解 73/100

    1000-1009 1000A+B Problem 这个还要写??? 1001 狼抓兔子 平面图最小割转化为对偶图最短路 #include<bits/stdc++.h> #define i ...

随机推荐

  1. XMPP即时通讯协议使用(四)——Openfire服务器源码编译与添加消息记录保存

    下载Openfire源码 下载地址:https://www.igniterealtime.org/downloads/index.jsp,当前最新版本为:4.2.3 Eclipse上部署Openfir ...

  2. 20180308-Python内置方法

    先大致粗略的说一下反射的概念,不是很准确,后续详细讲解: 1. 以字符串的形式,导入模块 2. 以字符串的形式,获取模块内部的函数,并执行 通常我们想在一个模块中导入另外一个模块,则需要通过 impo ...

  3. 转载他人的efk搭建文章后边有链接和地址

    EFK教程 - EFK快速入门指南   通过部署elasticsearch(三节点)+filebeat+kibana快速入门EFK,并搭建起可用的demo环境测试效果 目录 ▪ 用途▪ 实验架构▪ E ...

  4. Vue-选项卡切换

    <html> <head> <title>Vue实现tab切换效果</title> <script src="vue.js"& ...

  5. Go 查找

    sort.SearchInts(a []int, b int) 从数组a中查找b,前提是a必须有序 sort.SearchFloats(a []float64, b float64) 从数组a中查找b ...

  6. BZOJ2143 飞飞侠 & [校内NOIP2018模拟20181026] 最强大脑

    Time Limit: 50 Sec Memory Limit: 259 MB Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街 ...

  7. LOJ149 0/1分数规划

    竟然没有写过分数规划的题解 考前挣扎一发板子( 二分答案k 然后0/1分数规划的方法就是 分母乘过去然后贪心解决 注意实数二分的精度 一般估计一个次数比较好不然容易出现精度比较误差[惨痛教训 就做完了 ...

  8. Android Fastboot 与 Recovery 和刷机 千山万水迷了鹿

    1. 首先来看下Android系统的分区:   Android系统的分区.jpg   Android分区解释.png 安卓系统一般把rom芯片分成7个区,如果再加上内置sd卡这个分区,就是8个: hb ...

  9. Java序列化及反序列化

    序列化概念: 1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道 ...

  10. 【HDOJ6578】Blank(DP)

    题意:一个长为n的序列,每个位置上的值是0,1,2,3中的一个,有m个限制条件,限制位置[l[i],r[i]]中不同的数值有x[i]个,问方案数MOD 998244353 n<=100,m< ...