点此看题面 大致题意: 给定每个点的度数,让你求有多少种符合条件的无根树. \(prufer\)序列 这显然是一道利用\(prufer\)序列求解的裸题. 考虑到由\(prufer\)序列得到的结论:对于给定度数为\(d_{1\sim n}\)的一棵无根树共有\(\frac{(n-2)!}{\prod_{i=1}^n(d_i-1)!}\)种情况. 套公式即可. 高精/质因数分解/\(Python\) 等等,答案小于\(10^{17}\)? 这看似在\(long\ long\)范围内,但是我们前面…
点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道利用\(prufer\)序列求解的题. 还是考虑到由\(prufer\)序列得到的结论:对于给定度数为\(d_{1\sim n}\)的一棵无根树共有\(\frac{(n-2)!}{\prod_{i=1}^n(d_i-1)!}\)种情况. 但这次就不能直接套公式了. 推式子 考虑对于已知度数的点,设其…
题目描述 输入输出格式 输入格式: 输入文件第一行是一个正整数n,表示树有n个结点.第二行有n个数,第i个数表示di,即树的第i个结点的度数.其中1<=n<=150,输入数据保证满足条件的树不超过10^17个. 输出格式: 输出满足条件的树有多少棵. 输入输出样例 输入样例#1: 复制 4 2 1 2 1 输出样例#1: 复制 2首先不知道prufer序列的可以学一下:https://blog.csdn.net/update7/article/details/77587329知道以后,其实就是…
题目描述 输入输出格式 输入格式: 输入文件第一行是一个正整数n,表示树有n个结点.第二行有n个数,第i个数表示di,即树的第i个结点的度数.其中1<=n<=150,输入数据保证满足条件的树不超过10^17个. 输出格式: 输出满足条件的树有多少棵. 输入输出样例 输入样例#1: 4 2 1 2 1 输出样例#1:2 题解:质因数分解+prufer数列以前学过prufer数列...全忘了....n个点的无根树对应的数列的长度为N-2,这说明一个n个点的无根树有n^(n-2)种树转prufer数…
Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同,例如下面两棵树的DFS序都是1 2 4 5 3,BFS序都是1 2 3 4 5 现给定一个DFS序和BFS序,我们想要知道,符合条件的有根树中,树的高度的平均值.即,假如共有K棵不同的有根树具有这组DFS序和BFS序,且他们的高度分别是h1,h2,...,hk,那么请你输出 (h1+h2..+hk)…
题目: 洛谷2624 分析: 本文中所有的 "树" 都是带标号的. 介绍一种把树变成一个序列的工具:Prufer 序列. 对于一棵 \(n\) 个结点的树,每次选出一个叶子(度数为 \(1\) 的结点),将唯一的那个与它相连的点标号加入 Prufer 序列末尾,然后删去这个叶子及其所连的边,直到最后剩下两个点和一条边.由于每次删且仅删一个点和一条边,所以 Prufer 序列长度为 \(n-2\) .点 \(a\) 在序列中每次出现都意味着一条与它相连的边被删去了,一直删到 \(a\)…
传送门 解题思路 \(prufer\)序,就是所有的不同的无根树,都可以转化为唯一的序列.做法就是每次从度数为\(1\)的点中选出一个字典序最小的,把这个点删掉,并把这个点相连的节点加入序列,直到只剩两个节点.然后这个东西有一个显然的性质就是所有点会在序列中出现这个点的度数\(-1\)次,这个性质有一个推论就是给你一棵树所有点的度数,你可以算出无根树不同形态的个数.公式为\(ans=\frac{(n-2)!}{\prod_{i=1}^{n}(deg[i]-1)!}\).然后注意要质因数分解,否则…
洛谷P2290 [HNOI2004]树的计数 bzoj1211 [HNOI2004]树的计数 Description 一个有\(n\)个结点的树,设它的结点分别为\(v_1,v_2,\cdots, v_n\),已知第\(i\)个结点\(v_i\)的度数为\(d_i\) 问满足这样的条件的不同的树有多少棵. Input 第一行是一个正整数\(n\),表示树有\(n\)个结点.第二行有\(n\)个数,第\(i\)个数表示\(d_i\),即树的第\(i\)个结点的度数.其中\(1\le n\le 15…
1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1245  Solved: 383[Submit][Status] Description 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数. Input 第一行是一个正整数n,表示树有n个结点.第二…
知道prufer序列就能写...就是求个可重集的排列...先判掉奇怪的情况, 然后答案是(N-2)!/π(d[i]-1)! --------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring>   using namespace std;   typedef long long l…