Purfer序列】的更多相关文章

1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1005 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N(0 < N < = 1000),接下来N行,第i+1行…
之前没不知道这个数列. 一个purfer序列与一棵树一一对应. 长度为n的purfer的集合: A = { s | s is a sequence and a∈[1,len(s)+2] 一个直接的结论就是:n个带标记的节点的树有nn-2种. 这道题有了上面的对应,可以计算满足要求的purfer序列的个数,用组合计数可以解决. 感谢JMJST的细心讲解: http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557.html…
首先考虑无解的情况, 根据purfer序列,当dee[i]=0并且n!=1的时候,必然无解.否则为1. 且sum(dee[i]-1)!=n-2也必然无解. 剩下的使用排列组合即可推出公式.需要注意的是题目虽然说最终答案不会超过1e17,但是中间过程可能超. 由于n<=150, 所以sum最多是148. 于是我们可以打出150*150的组合表.实现O(1)计算组合数. # include <cstdio> # include <cstring> # include <cs…
purfer序列是对于带编号(互不相同)的无根树进行编码得到的,对于同样的n个顶点,其有n-2项,有n^(n-2)种,而且每种都合法(如果只要求他是一棵树的话)(可以通过证明翻译过程维持了各部分的树的形态来证明最终结果是一棵形态唯一的树),而且每种与每种树形态一一对应,还有一个小性质就是在一种树形态中,对于每个点其度数-1=其在purfer序列里出现的次数,这样我们就可以通过purfer来求树的形态数,而且还可以加入一些关于点的度数的限制.(做题的时候往往要特判n=1)bzoj1430:小猴打架…
传送门 这道题题意描述很清楚,不过我自己做的时候确实是一头雾水……又看了题解,发现要用到一个新知识,叫purfer序列. 我们来简单说一下什么是purfer序列.它可以被看作一种树的表现形式.一棵含有n个节点的树可以用一个长度为n-2的purfer序列表示,而其中每一个树都是1-n之间的一个数. 每一棵树,它都有自己唯一的purfer序列,反过来,对于每一个purfer序列,都能获得唯一的一棵树.也就是说,树与其purfer序列一一对应. 先说一下怎么求purfer序列.首先找出这棵树中,节点编…
我们经常干的一件事是把数变为关于图的问题来解决,那么久了未免不会有这个疑问:能不能把图变成数来解决问题? 所以有了这个purfer数列. 介绍一下这个数列有什么用(或者说有什么性质): 能够将一棵无根树转化成一个数列,且按这种编码数列具有唯一性 2.给定一purfer数列,可以还原出原来的无根树,且有且仅有一种方法. 那么这个数列是怎么形成的呢?下面来大概叙述一下整个过程: (1) 生成数列: 选取此时树上编号最小的叶子节点,删除此节点且将此节点所连接的节点加入数列末端 不断的重复上述操作,直到…
题解 首先我们要知道一条性质,prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下,其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按照排列组合得出来 这是多重集排列数 首先从n-2中选择d[1]个数是$C_{n}^{d[1]}$然后再从剩余n-d[1]中选d[2] $C_{n-d[1]}^{d[2]}$依次类推 $C_{n-2}^{d[1]}\times C_{n-2-d[1]}^{d[2]}\times C_{n-2-d[1]…
1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MB Description 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数. Input 第一行是一个正整数n,表示树有n个结点.第二行有n个数,第i个数表示di,即树的第i个结点的度数.其中1<=n<=150,输…
1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i个节点的度数Di,如果对度数不要求,则输入-1 Output 一个整数,表示不同的满足要求的树的个数,无解输出0 Sample Input 3 1 -1 -1 Sample Output 2…
1000-1009 1000A+B Problem 这个还要写??? 1001 狼抓兔子 平面图最小割转化为对偶图最短路 #include<bits/stdc++.h> #define id(i , j , k) ((k) * (N - 1) * (M - 1) + ((i) - 1) * (M - 1) + (j)) #define PII pair < int , int > #define st first #define nd second //This code is w…