题目描述

输入输出格式

输入格式:

输入文件第一行是一个正整数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数列:
将编号最小的叶子结点删掉,将与叶子结点相邻的点加入prufer数列
prufer数列转树:
对于集合G={1,2,3,..n}每次找出不在当前prufer数列里有的最小的元素x
与prufer数列的首项连边,删除首项与x,直到剩下两个元素连边...
结点i的度为x,那么i出现的次数为x-1
对于i号点度数为d[i]的 无根树 树的种数有 (n - 2) ! / ( (d1 - 1)! (d2 - 1)! ……(dn - 1)!
参考
会爆long long 分解质因数


代码:
#include<iostream>
#include<cstdio>
#define over printf("0\n")
#define end return 0
using namespace std; int n,x,ok,cnt[];
long long ans=; void chai(int x,int y){
for(int i=;i*i<=x;i++){
while(x%i==){
cnt[i]+=y;
x/=i;
}
}
if(x>)cnt[x]+=y;
} int main(){
scanf("%d",&n);
for(int i=;i<=n-;i++)chai(i,);
for(int i=;i<=n;i++){
scanf("%d",&x);ok+=x-;
if(!x&&n!=){
over; end;
}
for(int j=;j<=x-;j++)chai(j,-);
}
if(ok!=n-){
over;end;
}
for(int i=;i<=n;i++)
for(int j=;j<=cnt[i];j++)
ans=ans*i;
printf("%lld\n",ans);
return ;
}


洛谷 P2290 [HNOI2004]树的计数的更多相关文章

  1. P2290 [HNOI2004]树的计数(bzoj1211)

    洛谷P2290 [HNOI2004]树的计数 bzoj1211 [HNOI2004]树的计数 Description 一个有\(n\)个结点的树,设它的结点分别为\(v_1,v_2,\cdots, v ...

  2. Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数

    最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可 ...

  3. P2290 [HNOI2004]树的计数

    P2290 [HNOI2004]树的计数prufer序列模板题 #include <iostream> #include <cstdio> #include <queue ...

  4. LUOGU P2290 [HNOI2004]树的计数(组合数,prufer序)

    传送门 解题思路 \(prufer\)序,就是所有的不同的无根树,都可以转化为唯一的序列.做法就是每次从度数为\(1\)的点中选出一个字典序最小的,把这个点删掉,并把这个点相连的节点加入序列,直到只剩 ...

  5. [bzoj3244] [洛谷P1232] [Noi2013] 树的计数

    Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同, ...

  6. BZOJ1211: [HNOI2004]树的计数

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1245  Solved: 383[Submit][Statu ...

  7. BZOJ 1211: [HNOI2004]树的计数( 组合数学 )

    知道prufer序列就能写...就是求个可重集的排列...先判掉奇怪的情况, 然后答案是(N-2)!/π(d[i]-1)! -------------------------------------- ...

  8. 【BZOJ 1211】 1211: [HNOI2004]树的计数 (prufer序列、计数)

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2468  Solved: 868 Description 一 ...

  9. bzoj1211: [HNOI2004]树的计数 prufer编码

    题目链接 bzoj1211: [HNOI2004]树的计数 题解 prufer序 可重排列计数 代码 #include<bits/stdc++.h> using namespace std ...

随机推荐

  1. 【转】Linux查看物理CPU个数、核数、逻辑CPU个数

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/cpuinfo| g ...

  2. iOS AVPlayer 学习

    1 .使用环境: 在实际开发过程中 有需要展示流媒体的模块 ,需求非常简单 :播放 和 暂停 ,其实这个时候有很多选择 ,可以选择 MPMoviePlayerController(MediaPlaye ...

  3. UI控件之UIView与动画

    UIView:用来展示用户的界面,响应用户的操作(继承自UIResponder) UIView的作用:绘图.动画.处理事件 UIView可以包含和管理子视图,并且决定子视图的位置大小 获取所有的子视图 ...

  4. Windows读写文件的猫腻

    这里主要涉及对于回车换行的讨论. 回车:\r 换行:\n Windows读写文件分为普通文件读写和二进制文件读写. 如果以二进制的方式读写文件(如rb, wb),将会完全的把文件内容读出来,不做任何处 ...

  5. JDK源码 - ArrayList (基于1.7)

    前言   推荐一位大牛的博客: https://blog.csdn.net/eson_15/article/details/51121833 我基本都是看的他的源码分析,刚开始如果直接看jdk源码可能 ...

  6. vRO 添加已有磁盘到VM

    在vRO实现将已有虚拟机磁盘添加到另外的虚拟机上,以为vRA发布Oracle/SQL集群做准备: // 脚本需要两个输入 vm_obj和diskPathSystem.log("Attempt ...

  7. VC读取文件内容

    // chopper.cpp : Defines the entry point for the console application. // #include "stdafx.h&quo ...

  8. Mirantis对OpenStack的性能测试:高并发创建75000台虚拟机

    硅谷创业公司Mirantis不久前进行了一项基准测试,测试在OpenStack Havana版本上创建75000台虚拟机的性能数据.就启动时间和成功率而言,当应用250个并发部署75000台虚拟机是最 ...

  9. DB2导入导出方法总结

    1.导出 DEL 文本文件  export to D:\T_TESTTABLE20121220.del of del select * from T_TESTTABLE 2.导出 ixf 文本文件.i ...

  10. jsp:forEach标签

    该标签使用来对一个 Collection 集合中的一系列对象进行迭代输出,并且可以指定迭代次数.一般使用格式如下: <c:forEach items=”collection” var=”varN ...