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

Source

Solution

  懒,不想写大段的证明(况且我觉得我讲不懂),可以戳这,该大神讲的非常清楚

  或许$prufer$的魅力就在于每一个地方可以放任意的数吧,这倒是解决了$BZOJ1430$的疑问

 #include <bits/stdc++.h>
using namespace std;
int d[];
struct bigint
{
int a[], len; bigint()
{
memset(a, , ), len = ;
} bigint operator* (const int &rhs) const
{
bigint ans;
ans.len = len + ;
for(int i = ; i <= len; ++i)
ans.a[i] += a[i] * rhs;
for(int i = ; i < ans.len; ++i)
if(ans.a[i] > )
{
ans.a[i + ] += ans.a[i] / ;
ans.a[i] %= ;
}
while(!ans.a[--ans.len]);
return ans;
} bigint operator/ (const int &rhs) const
{
bigint ans;
ans = *this, ++ans.len;
for(int i = ans.len; i; --i)
{
ans.a[i - ] += ans.a[i] % rhs * ;
ans.a[i] /= rhs;
}
while(!ans.a[--ans.len]);
return ans;
}
}; int main()
{
int n, sum = , cnt = ;
bigint ans;
scanf("%d", &n);
for(int i = ; i <= n; ++i)
{
scanf("%d", d + i);
if(!d[i])
{
puts("");
return ;
}
if(~d[i]) ++cnt, sum += d[i] - ;
}
if(sum > * n - )
{
puts("");
return ;
}
ans.a[] = ;
for(int i = n - - sum; i < n - ; ++i)
ans = ans * i;
for(int i = ; i <= n - - sum; ++i)
ans = ans * (n - cnt);
for(int i = ; i <= n; ++i)
for(int j = ; j <= d[i] - ; ++j)
ans = ans / j;
for(int i = ans.len; i; --i)
printf("%d", ans.a[i]);
puts("");
return ;
}

[BZOJ1005] [HNOI2008] 明明的烦恼 (prufer编码)的更多相关文章

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

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

  2. bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)

    [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5907  Solved: 2305[Submit][Status][Di ...

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

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

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

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

  5. bzoj1005: [HNOI2008]明明的烦恼(prufer+高精度)

    1005: [HNOI2008]明明的烦恼 题目:传送门 题解: 毒瘤题啊天~ 其实思考的过程还是比较简单的... 首先当然还是要了解好prufer序列的基本性质啦 那么和1211大体一致,主要还是利 ...

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

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

  7. bzoj1005 [HNOI2008]明明的烦恼

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3032  Solved: 1209 Description ...

  8. 【prufer编码+组合数学】BZOJ1005 [HNOI2008]明明的烦恼

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

  9. BZOJ1005 HNOI2008明明的烦恼(prufer+高精度)

    每个点的度数=prufer序列中的出现次数+1,所以即每次选一些位置放上某个点,答案即一堆组合数相乘.记一下每个因子的贡献分解一下质因数高精度乘起来即可. #include<iostream&g ...

随机推荐

  1. TKCPP

    volume one: http://book.huihoo.com/thinking-in-cpp-2nd-ed-vol-one/ volume2 : http://book.huihoo.com/ ...

  2. CentOS利用Nginx+Docker部署.netcore应用

    安装docker 官方文档https://docs.docker.com/engine/installation/linux/docker-ce/centos/ [root@sn ~]# yum re ...

  3. 二、Item Pipeline和Spider-----基于scrapy取校花网的信息

    Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...

  4. Ubuntu忘记root密码怎么办?

    http://www.linuxidc.com/Linux/2016-05/131256.htm

  5. 针对Student表的DAO设计实例

    完整代码以及junit,mysql--connector包下载地址 : https://github.com/CasterWx/MyStudentDao 表信息: 代码: dao包----impl包- ...

  6. nodejs爬虫初试---superagent和cheerio

    前言 早就听过爬虫,这几天开始学习nodejs,写了个爬虫 demo ,爬取 博客园首页的文章标题.用户名.阅读数.推荐数和用户头像,现做个小总结. 使用到这几个点: 1.node的核心模块-- 文件 ...

  7. python技巧

    python小技巧: 1.强烈建议使用Python的r前缀,就不用考虑转义的问题了. 2.正则表达式的使用: test = '用户输入的字符串' if re.match(r'正则表达式', test) ...

  8. http缓存(http caching)

    通过使用缓存web网站和web应用的性能能够得到显著的提升.Web caches能够减小延迟和网络流量,从而缩短展示资源所花费的时间. 在http中控制缓存行为的首部字段是Cache-Control, ...

  9. linux 运维 nginx服务器

    nginx(web服务器) nginx是一个高性能的http和反向代理服务器,同时也是一个imap/pop3/smtp 代理服务器比apache简单官网:http://nginx.org nginx配 ...

  10. 相位噪声 dBc/Hz

    相位噪声和抖动是对同一种现象的两种不同的定量方式.在理想情况下,一个频率固定的完美的脉冲信号(以1 MHz为例)的持续时间应该恰好是1微秒,每500ns有一个跳变沿.但不幸的是,这种信号并不存在.如图 ...