「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/ ...
随机推荐
- el表达式 jsp页面取list的长度
方法1 ${cimlistForJsp.size()} 方法2,引入 <%@ taglib prefix="fn" uri="http://java.sun.com ...
- win10 ubuntu 双系统启动顺序设置
之前安装ubuntu的时候就遇到过这个问题, 当时解决了,设置成开始可以选择启动ubuntu系统还是win系统. 但是过了好久后又忘记了,最近win10开了一次安全模式启动后,一开机就是win10,u ...
- 【模板】tyvjP1520 树的直径 [2017年5月计划 清北学堂51精英班Day3]
P1520 树的直径 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 树的直径,即这棵树中距离最远的两个结点的距离.每两个相邻的结点的距离为1,即父亲结点与儿 ...
- PhpSpreadsheet处理表格2
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 警告: deleting object of polymorphic class type which has non_virtual destructor
如果基类里有虚函数,定义了基类指针指向派生类,就会需要定义基类虚析构,这样,基类指针析构的时候,就会先析构派生类,再析构基类. 在用基类指针指向派生类时, 在基类析构函数声明为virtual的时候,d ...
- CSS(前)篇
1.1CSS重点总结 1.1.1 选择器 1.1.2 盒子模型 1.1.3 浮动 1.1.4定位 1.2CSS介绍 概念: 层叠样式表或者级联样式表(Cascading Style Sheets) 层 ...
- 性能监控工具Munin
实际场景 公司产品需要观察Ubuntu主机性能,以衡量客户现场的产品是否能满足高频使用需求 选型 在比较了诸多工具之后,考虑时间成本因素,用了比较简单的Munin 安装步骤 1. apt-get in ...
- 完整版unity安卓发布流程(包括SDK有原生系统依赖关系的工程)
要3个东西!NDS,SDK,JDK, NDK官网下载:https://developer.android.google.cn/ndk/downloads/index.html(注意系统是不是64位) ...
- day38 12-Spring的Bean的属性的注入:名称空间p
xmlns="http://www.springframework.org/schema/beans"是默认的名称空间. xmlns:xsi="http://www.w3 ...
- layui的select联动 - CSDN博客
要实现联动效果注意两点: 第一要可以监听到select的change事件: 第二异步加载的内容,需要重新渲染后才可以 正常使用. html结构: <form class="layui- ...