传送门 解题思路 \(prufer\)序,就是所有的不同的无根树,都可以转化为唯一的序列.做法就是每次从度数为\(1\)的点中选出一个字典序最小的,把这个点删掉,并把这个点相连的节点加入序列,直到只剩两个节点.然后这个东西有一个显然的性质就是所有点会在序列中出现这个点的度数\(-1\)次,这个性质有一个推论就是给你一棵树所有点的度数,你可以算出无根树不同形态的个数.公式为\(ans=\frac{(n-2)!}{\prod_{i=1}^{n}(deg[i]-1)!}\).然后注意要质因数分解,否则…
最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可还行OvO) 首先前置知识:$Prufer序列$ 然后,因为对于一个$ Prufer $序列有$n-2$ 项,而每个点的度数-1是这个点在$ Prufer$ 序列中出现的次数 所以...这不是多重集的排列吗(不懂多重集?) 所以我们成功了一半(雾) 在计算时会爆$ long \space long…
P2290 [HNOI2004]树的计数prufer序列模板题 #include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cmath> #include <cstring> #define inf 2147483647 #define N 1000010 #define p(a) putchar(a) #define Fo…
洛谷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: 2468  Solved: 868 Description 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数. Input 第一行是一个正整数n,表示树有n个结点.第二行有n个数,第i个数表示di,即…
1211: [HNOI2004]树的计数 题目:传送门 题解: 今天刚学prufer序列,先打几道简单题 首先我们知道prufer序列和一颗无根树是一一对应的,那么对于任意一个节点,假设这个节点的度数为k,那么在prufer序列里面这个节点就会出现k-1次 (反过来也同理成立) 那么具体的原因这里有解释: 对于任意一个节点在prufer序列里出现一次的话,那么就表示我有一个孩子被删了,那么少了的一次去哪里了呢,因为每次加进去的都是父亲节点,那么少的肯定就是我自己连出去的一条边啊... 知道了这个…
题目描述 输入输出格式 输入格式: 输入文件第一行是一个正整数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数…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1211 分析: 关于无根树的组合数学问题肯定想到Prufer序列,类似bzoj1005那题 说下prufer序列的性质: 1.一个无根树对应一个prufer序列 2.一个n个节点无根树对应的prufer序列长度为n-2 3.prufer序列中某节点出现的次数==这个节点在对应的无根树中度数-1 所以这题求无根树的数量等价于求prufer序列的数量. 注意无解的情况就行了.…
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,输入数据保证满足条件的树不超过10^17个. Output 输出满足条件的树有多少棵. Sample Input 4 2 1…
题目链接 bzoj1211: [HNOI2004]树的计数 题解 prufer序 可重排列计数 代码 #include<bits/stdc++.h> using namespace std; #define int long long int n = 0; int b[10007]; int cnt[10007]; void Div(int x,int k = 1) { for(int j = 2;j * j <= x;++ j) { while(x % j == 0) { cnt[j]…