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

两棵树分别为1-2-3;1-3-2

利用Purfer Sequence,参见:http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557.html

 #include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std; #define maxn 1010
int d[maxn],n,sum,cnt,tot,prime[maxn],num[maxn];
bool exist[maxn];
struct node
{
int a[maxn*],len;
node(){memset(a,,sizeof(a)); len = ;}
friend inline node operator *(node &x,int y)
{
node z; z.len = x.len + ;
int i;
for (i = ;i <= z.len;++i)
{
z.a[i] += x.a[i] * y;
z.a[i+] += z.a[i] / ;
z.a[i] %= ;
}
while (!z.a[z.len]) --z.len;
return z;
} inline void print() {for (int i = len;i;--i) printf("%d",a[i]);}
}ans; inline void ready()
{
int i,j;
for (i = ;i <= ;++i)
if (!exist[i])
{
exist[i] = true;
prime[++tot] = i;
for (j = i*i;j <= ;j += i)
exist[j] = true;
}
} inline bool okay()
{
for (int i = ;i <= n;++i)
{
if (d[i] > ) sum += d[i] - ,++cnt;
if (d[i] == ) return false;
}
if (sum + n - cnt > *(n-)) return false;
if (cnt == n && sum != *(n-)) return false;
return true;
} inline void Div(int a,int bei)
{
if (a == ) return;
if (bei == ) return;
for (int i = ;i <= tot;++i)
{
if (a == ) break;
if (a % prime[i] == )
{
int t = ;
while (a % prime[i] == ) ++t,a /= prime[i];
num[i] += t * bei;
}
}
} inline void calc()
{
ready();
for (int i = ;i <= n-;++i) Div(i,);
Div(n - cnt,n-sum-);
for (int i = ;i <= n--sum;++i) Div(i,-);
for (int i = ;i <= n;++i) if (d[i] != -)
for (int j = ;j < d[i];++j) Div(j,-);
ans.a[] = ;
for (int i = ;i <= tot;++i)
for (int j = ;j <= num[i];++j)
ans = ans * prime[i];
ans.print();
} int main()
{
scanf("%d",&n); int i;
for (i = ;i <= n;++i) scanf("%d",d+i);
if (!okay()) printf("%d",);
else calc();
return ;
}

BZOJ 1005 明明的烦恼的更多相关文章

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

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

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

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

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

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

  4. BZOJ 1005 明明的烦恼(prufer序列+高精度)

    有一种东西叫树的prufer序列,一个树的与一个prufer序列是一一对应的关系. 设有m个度数确定的点,这些点的度为dee[i],那么每个点在prufer序列中出现了dee[i]-1次. 由排列组合 ...

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

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

  6. BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)

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

  7. 【BZOJ】【1005】【HNOI2008】明明的烦恼

    Prufer序列/排列组合+高精度 窝不会告诉你我是先做了BZOJ1211然后才来做这题的>_>(为什么?因为我以前不会高精度呀……) 在A了BZOJ 1211和1089之后,蒟蒻终于有信 ...

  8. BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数

    1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  9. bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2248  Solved: 898[Submit][Statu ...

随机推荐

  1. 初识phaser框架——开源的HTML5 2D游戏开发框架

    背景: 在网上看到,65行实现flappy bird,感到很好奇.原来是使用开源的2D游戏框架 phaser开发的. 什么是phaser2D游戏开发框架呢? 借鉴与网上的资料: 1.    Phase ...

  2. 微软ASP.NET网站部署指南(10):迁移至SQL Server

    1.  综述 第2章的部署SQL Server Compact和第9章的部署数据库更新里解释了为什么终于要升级到完整版SQL Server .本章节将告诉你怎样来做. SQL Server Expre ...

  3. 学习Oracle应该准备的技能

    首先数据库方面的技能:数据库体系结构.基本概念和基本理论.数据库管理.备份.恢复.SQL开发.PLSQL开发.工具的使用等等. 操作系统方面的技能:对Linux/Unix系统应该有相当的基础.理解RA ...

  4. MYSQL查询计划KEY_LEN

    http://www.innomysql.com/article/25241.html 1 key_len的含义 2 MySQL中key_len计算规则 3 通过key_len分析联合索引 本文首先介 ...

  5. 轻量级的原型设计工具-Axure RP

    1. 软件下载地址: http://www.downxia.com/downinfo/25742.html 这个版本不需要注册码,不需要安装,存绿色版. 2. 基本介绍教程: http://wenku ...

  6. iOS UI控件继承关系图

    闲来无事,把UI控件的继承关系图整理下来,供自己和大家使用.

  7. 15、SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...

  8. javascript中,你真的会用console吗?

    使用console进行性能测试和计算代码运行时间 对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用debugger会显得过于笨重,最常用的方法是会将值输出到控制台上方便调试. ...

  9. 自己动手写控件(模仿mvc htmlhelper的类)

    自定义helper类,要求命名空间在 System.Web.Mvc之下,要求,静态类,静态方法,特殊生成对应html的返回字段, 传递Htmlhleper,返回特定类型 返回值是MvcHtmlStri ...

  10. Hadoop的读写类调用关系_图示