「BZOJ1005」[HNOI2008] 明明的烦恼
先放几个prufer序列的结论:
Prufer序列是一种对有标号无根树的编码,长度为节点数-2。
具体存在无根树转化为prufer序列和prufer序列转化为无根树两种操作:
无根树转化为prufer序列 1、找到编号最小的度数为1的点 2、删除该节点并在序列中添加与该节点相连的节点的编号 3、重复1,2操作,直到整棵树只剩下两个节点
prufer序列转化为无根树 设prufer序列为M,另一个集合G={1,2…n} 每次提取M中最靠前的元素u与G中不存在与M且最靠前的元素v,将u与v连边,分别在两个集合中删除u、v。 最后G中剩下两个元素,将这两个点连边。
Prufer序列中某个编号出现的次数等于这个编号的节点在无根树中的度数-1 。 一棵n个节点的无根树唯一地对应了一个长度为n-2的数列,数列中的每个数都在1到n的范围内
有关性质的应用 n个点构成的无根树的个数: $n^(n-2)$ 确定n个点度数分别为d1,d2…时无根树个数: $(n-2)!/((d1-1)!*(d2-1)!*…)$ n个点的
有标号有根树的个数: $n*n^{n-2}=n^{n-1}$
然后看这个题:
有某些点知道度数,那么先把这些点放到prufer序列中,设num为度数大于0的点数,fnum为已知度数的点出现次数总和,
方案数C_{n-2}^{fnum}*(n-2)!/((d1-1)!*(d2-1)!*…),然后把剩下的序列填满,每个序列有n-num种情况,乘法计数原理成起来即${n-num}^{n-2-fnum}$,最后将两部分乘起来即可。(这个题也用到了高精……)
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
#define ma(x) memset(x,0,sizeof(x))
int n,d[],num,fnum;
struct sz
{
int a[];
}a;
sz mul(sz &a,int b)
{
sz c;ma(c.a);
c.a[]=a.a[];
for(int i=;i<=a.a[];i++)
c.a[i]=a.a[i]*b;
for(int i=;i<=c.a[];i++)
if(c.a[i]>=)
{
c.a[i+]+=c.a[i]/;
c.a[i]%=;
if(i==c.a[])c.a[]++;
}
return c;
}
sz div(sz &a,int b)
{
sz ans;ma(ans.a);
int yu=;
for(int i=;i<=a.a[];i++)
{
yu=yu*+a.a[i];
if(yu/b>)
{
ans.a[++ans.a[]]=yu/b;
yu%=b;
}
else if(ans.a[])ans.a[]++;
}
return ans;
}
void print(sz &a)
{
for(int i=;i<=a.a[];i++)cout<<a.a[i];
puts("");
}
bool cmp(int a,int b){return a>b;}
signed main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>d[i];
if(d[i]>-)num++;
if(d[i]>=)fnum+=d[i]-;
if((d[i]==&&n!=)||d[i]>=n||(d[i]!=&&n==)){puts("");return ;}
}
a.a[]=a.a[]=;
for(int i=;i<=n-;i++)a=mul(a,i);//(n-2)!
sort(d+,d+n+,cmp);
reverse(a.a+,a.a+a.a[]+);
for(int i=;i<=num;i++)//(d[i]-1)!
for(int j=;j<d[i];j++)
a=div(a,j);
for(int i=;i<=n--fnum;i++)a=div(a,i);//(n-2-fnum)!
reverse(a.a+,a.a+a.a[]+);
for(int i=;i<=n--fnum;i++)
a=mul(a,n-num);
reverse(a.a+,a.a+a.a[]+);
print(a);
}
「BZOJ1005」[HNOI2008] 明明的烦恼的更多相关文章
- 【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)
[BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> ...
- 【bzoj1005】[HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4175 Solved: 1660[Submit][Stat ...
- 【bzoj1005】 HNOI2008—明明的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1005 (题目链接) 题意 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多 ...
- 【bzoj1005】[HNOI2008]明明的烦恼 Prufer序列+高精度
题目描述 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i ...
- 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度
[BZOJ1005][HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可 ...
- bzoj1005 [HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3032 Solved: 1209 Description ...
- bzoj1005: [HNOI2008]明明的烦恼(prufer+高精度)
1005: [HNOI2008]明明的烦恼 题目:传送门 题解: 毒瘤题啊天~ 其实思考的过程还是比较简单的... 首先当然还是要了解好prufer序列的基本性质啦 那么和1211大体一致,主要还是利 ...
- BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)
题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...
- BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
随机推荐
- ModelAndView返回mav时,报404
报404的可能性太多了 简单来看,404后边有信息,说明请已经分配到了控制器 经过调试发现,mav已经分配到了页面 原因,modelandview的包导入错误,正确的包是 import org.spr ...
- Leetcode628.Maximum Product of Three Numbers三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1,2,3,4] 输出: 24 注意: 给定的整型数组长度 ...
- 【每日一linux命令7】用户及用户组
一.查询用户及用户组相关命令 1.whoami 查询当前登录的用户名 2.groups 查询当前登录用户名所在的用户组 3.groups root 查询root用户名所在的用户组 二.怎么批量查看用户 ...
- bzoj 1045 [HAOI2008] 糖果传递——设变量推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 费用流TLE. #include<iostream> #include&l ...
- VirtualBox安装,VirtualBox安装CentOS
1.进入VirtualBox官网下载页,找到对应的版本 https://www.virtualbox.org/wiki/Downloads 按步骤安装好 2.进入CentOS官网下载页,找到对应的版本 ...
- HTML-DOM实例——实现带样式的表单验证
HTML样式 基于table标签来实现页面结构 <form id="form1"> <h2>增加管理员</h2> <table&g ...
- 【JZOJ4929】【NOIP2017提高组模拟12.18】B
题目描述 在两个n*m的网格上染色,每个网格中被染色的格子必须是一个四联通块(没有任何格子被染色也可以),四联通块是指所有染了色的格子可以通过网格的边联通,现在给出哪些格子在两个网格上都被染色了,保证 ...
- 【JZOJ4763】【NOIP2016提高A组模拟9.7】旷野大计算
题目描述 输入 输出 样例输入 5 5 9 8 7 8 9 1 2 3 4 4 4 1 4 2 4 样例输出 9 8 8 16 16 数据范围 解法 离线莫队做法 考虑使用莫队,但由于在删数的时候难以 ...
- 大数据技术之Flume
第1章 概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume基于流式架构,灵活简单. 1.2 Flume组成架构 ...
- docker无法删除镜像,Error: No such container,附docker常用命令
最近打算删除掉docker镜像但是发现有几个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such container的错误,最后终于找到了办法直接删除文件,步骤如下: 切换到r ...