bzoj1005: [HNOI2008]明明的烦恼 prufer序列
https://www.lydsy.com/JudgeOnline/problem.php?id=1005
给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树?
题解:prufer序列,prufer序列是一种无根树的编码表示,对于一棵n个节点带编号的无根树,对应唯一一串长度为n-2的prufer编码。
prufer序列中某个编号出现的次数就等于这个编号的节点在无根树中的度数-1
所以一张n个点的无向完全图有n^(n-2)个生成树(长度为n-2的数列,每个地方有n种放法)
n个节点度依次为d1.d2.......dn,无根树一共有(n-2)!/(d1-1)!*(d2-1)!....*(dn-1)!, 即点的数量固定(di-1),要求放法不一样,全排列除上每种点重复的放法
对于该题,剩余的点left为n-2-di(di!=-1),一共有(n-2)!/(di-1)!*...*left!, 然后left每个有m(di==-1的点)中可以放的点,就是m^left中方法
最后答案就是(n-2)/(di-1)!。。。。*m^(left)
/**************************************************************
Problem: 1005
User: walfy
Language: Java
Result: Accepted
Time:1432 ms
Memory:20500 kb
****************************************************************/ import java.math.BigInteger;
import java.util.Scanner; public class Main { /**
* @param args
*/
static BigInteger [] fac = new BigInteger [1000+10];
static void init()
{
fac[0] = BigInteger.ONE;
for(int i=1;i<=1000;i++)
{
fac[i]=fac[i-1].multiply(BigInteger.valueOf(i));
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
init();
int n = cin.nextInt();
int [] d = new int[1000+10];
int sum = 0,num = 0;
BigInteger ans = fac[n-2];
for(int i=1;i<=n;i++)
{
d[i] = cin.nextInt();
if(d[i]!=-1)
{
sum += d[i]-1;
ans=ans.divide(fac[d[i]-1]);
}
else num++;
}
int left = n-2-sum;
ans = ans.divide(fac[left]);
ans = ans.multiply(BigInteger.valueOf(num).pow(left));
System.out.println(ans);
} }
bzoj1005: [HNOI2008]明明的烦恼 prufer序列的更多相关文章
- 【bzoj1005】[HNOI2008]明明的烦恼 Prufer序列+高精度
题目描述 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i ...
- [BZOJ1005] [HNOI2008] 明明的烦恼 (prufer编码)
Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N ...
- [bzoj1005][HNOI2008]明明的烦恼-Prufer编码+高精度
Brief Description 给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线,可产生多少棵度数满足要求的树? Algorithm Design 结论题. 首先可以参考这篇文章 ...
- bzoj1005: [HNOI2008]明明的烦恼(prufer+高精度)
1005: [HNOI2008]明明的烦恼 题目:传送门 题解: 毒瘤题啊天~ 其实思考的过程还是比较简单的... 首先当然还是要了解好prufer序列的基本性质啦 那么和1211大体一致,主要还是利 ...
- bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2248 Solved: 898[Submit][Statu ...
- BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5786 Solved: 2263[Submit][Stat ...
- BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)
[HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5907 Solved: 2305[Submit][Status][Di ...
- bzoj1005 [HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3032 Solved: 1209 Description ...
随机推荐
- Jmeter+jenkins如何快速搭建接口和性能测试持续集成解决方案-[基于windows篇]
最近在用Jmeter本来想写一个详细的使用教程,突然看到有前辈已经写好了不错的教程,特此"借花献佛"整理出来分享给大家! Jenkins + Jmeter 构建接口.性能测试持续集 ...
- nginx php fastcgi安装
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一种语言编 ...
- Font: a C++ class
Font: a C++ class This class is used in Fractal Generator. Avi Examples The header fileFon ...
- Git在Githib和Github上的使用
本文使用的环境是linux里 一.git的常用命令解释: 1.基础命令: git init #创建版本库 git add <file> #将文件修改添加到暂存区 git commit -m ...
- 清晰讲解LSB、MSB和大小端模式及网络字节序
时隔一个月又回到了博客园写文章,很开心O(∩_∩)O~~ 今天在做需求的涉及到一个固件版本的概念,其中固件组的人谈到了版本号从MSB到LSB排列,检索查阅后将所得整理如下. MSB.LSB? MSB( ...
- vue生命周期探究(二)
vue生命周期探究(二) 转载自:https://segmentfault.com/a/1190000008923105 上一章我们介绍了vue的组件生命周期和路由勾子,这一章,让我们来看看在vue- ...
- Mybatis 中 update 语句 动态 语句
<update id="updateAdministrationAsset" parameterType="com.opple.fa.assetcard.entit ...
- 带你走进ajax(4)
处理ajax返回数据类型 ajax返回数据类型:纯文本格式.xml.json 如果只获取简单的字符串可以采用纯文本格式. 如果返回的数据类型比较复杂,则采用xml或者json. 采用XML来处理数据 ...
- vue下载文件
import fileDownload from 'js-file-download' let params = { ", ", "filename":&quo ...
- C#创建类,方法,接口,字段 的 默认类型
1.在namespace中的类.接口默认是internal类型的,也可以显示的定义为public类型2.在一个类里面,属性和方法默认是private的,可以显示的定义为public.private.p ...