BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
2015-08-30 21:59
447 查看
1005: [HNOI2008]明明的烦恼
Time Limit: 20 SecMemory Limit: 256 MB
题目连接
http://www.lydsy.com/JudgeOnline/problem.php?id=1005
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
HINT
题意
题解:
实际上就是让你求,有多少种Purfer序列
理解Purfer序列之后,这就是排列组合题了
这篇博文写的非常精彩:http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557.html
代码:
import java.util.*; import java.math.*; public class Main { static int n, d[]=new int[10002]; static BigInteger p[]=new BigInteger[1002]; static BigInteger ans; static public void main(String args[]) { Scanner IN=new Scanner(System.in); n=IN.nextInt(); int sum=0, flag=0, cnt=0; for(int i=0; i<n; i++) { d[i]=IN.nextInt(); if(d[i]==0 || d[i]>n-1) flag=1; if(d[i]==-1) continue; sum+=d[i]-1; cnt++; } IN.close(); if(n==1) { if(d[0]==0 || d[0]==-1) System.out.println(1); else System.out.println(0); return; } if(n==2) { if((d[0]==-1 || d[0]==1) && (d[1]==-1 || d[1]==-1)) System.out.println(1); else System.out.println(0); return; } if(flag==1) System.out.println(0); p[0]=BigInteger.ONE; for(int i=1; i<=n; i++) p[i]=p[i-1].multiply(BigInteger.valueOf(i)); ans=p[n-2].divide(p[n-2-sum]); for(int i=0; i<n; i++) { if(d[i]==-1) continue; ans=ans.divide(p[d[i]-1]); } for(int i=0; i<n-2-sum; i++) ans=ans.multiply(BigInteger.valueOf(n-cnt)); System.out.println(ans); } }
相关文章推荐
- js获得页面鼠标位置
- 安装supervisor调试nodejs
- 安装node-inspector来调试node
- 学点bootstrap
- Servlet和JSP学习指导与实践(三):JSP助阵
- jquery几个常用的demo
- javascript方法时间差值转为00:00:00格式
- jquery的checkbox操作
- jQueryMobile的事件
- jQuery操作DOM元素
- JQuery的ready函数与JS的onload的区别
- jQueryMobile的组件之下拉菜单(selectMenu)
- 对NSDictionary的遍历
- CSS选择器的特殊性和LOVE HA
- 如何尽量避免引用jQuery
- js总结1
- jsp查询页面和结果页面在同一页面显示和交互
- [LeetCode][JavaScript]Linked List Cycle II
- 从html字符串中获取div内容---jquery
- css3