有一种东西叫树的prufer序列,一个树的与一个prufer序列是一一对应的关系。

设有m个度数确定的点,这些点的度为dee[i],那么每个点在prufer序列中出现了dee[i]-1次。

由排列组合可以推出公式。需要用高精度。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 1100
using namespace std;
typedef long long ll;
struct abcd{
ll xx[];
int cnt;
abcd(int x=)
{
memset(xx,,sizeof xx);
xx[]=x;
cnt=;
}
ll& operator [] (int x)
{
return xx[x];
}
}ans();
abcd operator *= (abcd &x,abcd &y)
{
int i,j;
abcd z;
for(i=;i<=x.cnt;i++)
for(j=;j<=y.cnt;j++)
z[i+j-]+=x[i]*y[j],z[i+j]+=z[i+j-]/,z[i+j-]%=;
z.cnt=x.cnt+y.cnt;
if(!z[z.cnt])
--z.cnt;
x=z;
}
ostream& operator << (ostream& os,abcd &x)
{
int i;
printf("%lld",x[x.cnt]);
for(i=x.cnt-;i;i--)
printf("%08lld",x[i]);
return os;
}
int n,m,remain,cnt[M],stack[M],top;
void Decomposition(int x,int y)
{
int i;
for(i=;i*i<=x;i++)
while(x%i==)
cnt[i]+=y,x/=i;
if(x^)
cnt[x]+=y;
}
void Quick_Power(int i,int y)
{
abcd x(i);
while(y)
{
if(y&)ans*=x;
x*=x;
y>>=;
}
}
int main()
{
int i,x;
cin>>n;remain=n-;
for(i=;i<=n;i++)
{
scanf("%d",&x);
if(x==-)
++m;
else if(x>)
stack[++top]=x-,remain-=x-;
}
for(i=;i<=n-;i++)
Decomposition(i,);
while(top)
{
for(i=;i<=stack[top];i++)
Decomposition(i,-);
stack[top--]=;
}
for(i=;i<=remain;i++)
Decomposition(i,-);
Decomposition(m,remain);
for(i=;i<=n;i++)
if(cnt[i])
Quick_Power(i,cnt[i]);
cout<<ans<<endl;
}

BZOJ 1005 明明的烦恼(prufer序列+高精度)的更多相关文章

  1. BZOJ 1005 明明的烦恼 Prufer序列+组合数学+高精度

    题目大意:给定一棵n个节点的树的节点的度数.当中一些度数无限制,求能够生成多少种树 Prufer序列 把一棵树进行下面操作: 1.找到编号最小的叶节点.删除这个节点,然后与这个叶节点相连的点计入序列 ...

  2. 【bzoj1005】[HNOI2008]明明的烦恼 Prufer序列+高精度

    题目描述 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i ...

  3. [HNOI2008][bzoj 1005]明明的烦恼(prufer序列)

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7121  Solved: 2816[Submit][Stat ...

  4. bzoj1005: [HNOI2008]明明的烦恼 prufer序列

    https://www.lydsy.com/JudgeOnline/problem.php?id=1005 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的 ...

  5. [BZOJ]1005 明明的烦恼(HNOI2008)

    BZOJ的第一页果然还是很多裸题啊,小C陆续划水屯些板子. Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间 ...

  6. BZOJ 1005 明明的烦恼

    Description 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 ...

  7. BZOJ 1005 明明的烦恼 (组合数学)

    题解:n为树的节点数,d[ ]为各节点的度数,m为无限制度数的节点数. 则               所以要求在n-2大小的数组中插入tot各序号,共有种插法: 在tot各序号排列中,插第一个节点的 ...

  8. [bzoj1005][HNOI2008]明明的烦恼-Prufer编码+高精度

    Brief Description 给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线,可产生多少棵度数满足要求的树? Algorithm Design 结论题. 首先可以参考这篇文章 ...

  9. BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5786  Solved: 2263[Submit][Stat ...

随机推荐

  1. print&input--Python

    1.print --> 打印到屏幕输出字符串 print("this is a dog!") -->代码 D:\Python\venv\Scripts\python.e ...

  2. Java基础—ArrayList源码浅析

    注:以下源码均为JDK8的源码 一. 核心属性 基本属性如下: 核心的属性其实是红框中的两个: //从注释也容易看出,一个是集合元素,一个是集合长度(注意是逻辑长度,即元素的个数,而非数组长度) 其中 ...

  3. 成都Uber优步司机奖励政策(4月1日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. Ruby基础教程 1-10

    类结构 1.数值类结构     Fixnum到Bignum会自动转换   2.常用数值表示   3. ans=10.divmod(3) ans[0]是商  ans[1]是余数   4.实例方法roun ...

  5. 开发发布npm module包

    开发发布npm module包 问题 在项目开发过程中,每当进入一个新的业务项目,从零开始搭建一套前端项目结构是一件让人头疼的事情,就要重新复制一个上一个项目的前端框架和组件代码库.其中很多功能的模块 ...

  6. 180605-Linux下Crontab实现定时任务

    Linux下Crontab实现定时任务 基于Hexo搭建的个人博客,是一种静态博客页面,每次新增博文或者修改,都需要重新的编译并发布到Github,这样操作就有点蛋疼了,一个想法就自然而然的来了,能不 ...

  7. git学习笔记(一)——从已存在的远程仓库克隆

    应用场景:在公司电脑把脚本上传到公司的gitlab上,在家里想继续写: 问题: 家里的之前代码连的是github的仓库,需要把公钥替换成公司gitlab的. 环境:win10,pycharm,git ...

  8. Selenium(Python)等待元素出现

    1.显式等待 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdri ...

  9. Appium1.8及以上命令行启动

    安装命令行启动版本的Appium,appium-doctor需要独立下载了,用 npm的话需要FQ才好使,所有安装了cnpm代替npm, cnpm是从淘宝的国内镜像下载 npm config rm p ...

  10. 第一模块·开发基础-第1章 Python基础语法

    Python开发工具课前预习 01 Python全栈开发课程介绍1 02 Python全栈开发课程介绍2 03 Python全栈开发课程介绍3 04 编程语言介绍(一) 05 编程语言介绍(二)机器语 ...