[HNOI2008]明明的烦恼
Description
自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在
任意两点间连线,可产生多少棵度数满足要求的树?
Input
第一行为N(0 < N < = 1000),
接下来N行,第i+1行给出第i个节点的度数Di,如果对度数不要求,则输入-1
Output
一个整数,表示不同的满足要求的树的个数,无解输出0
Sample Input
1
-1
-1
Sample Output
HINT
两棵树分别为1-2-3;1-3-2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct Big_Num
{
int a[],len;
Big_Num()
{}
Big_Num &operator *=(const int &b)
{int i;
for (i=;i<=len;i++)
a[i]*=b;
for (i=;i<=len;i++)
a[i+]+=a[i]/,a[i]%=;
int loc=len+;
while (a[loc])
{
a[loc+]+=a[loc]/;
a[loc]%=;
loc++;
}
len=loc-;
}
void print()
{int i;
for (i=len;i>=;i--) printf("%d",a[i]);
cout<<endl;
}
}ans;
int d[],du[],pri[],pre[],tot,n,cnt,sum,flag;
bool vis[];
int main()
{int i,j;
freopen("tree1.in","r",stdin);
freopen("1005.out","w",stdout);
cin>>n;
flag=;
for (i=;i<=n;i++)
{
scanf("%d",&d[i]);
if (d[i]!=-) cnt++,sum+=d[i]-;
if (d[i]==||d[i]==n) flag=;
}
if (n==)
{
cout<<;
return ;
}
if (n==)
{
if ((d[]==||d[]>)||(d[]==||d[]>))
cout<<;
else cout<<;
return ;
}
if (sum>n-)
{
cout<<;
return ;
}
if (flag)
{
cout<<;
return ;
}
for (i=;i<=n-;i++)
du[i]++;
for (i=;i<=n--sum;i++)
du[i]--;
for (i=;i<=n;i++)
if (d[i]!=-)
{
for (j=;j<=d[i]-;j++)
du[j]--;
}
for (i=;i<=n--sum;i++)
du[n-cnt]++; for (i=;i<=;i++)
{
if (vis[i]==)
{
pri[++tot]=i;
pre[i]=i;
}
for (j=;j<=tot;j++)
{
if (pri[j]*i>) break;
vis[i*pri[j]]=;
pre[i*pri[j]]=pri[j];
if (i%pri[j]==) break;
}
}
for (i=;i>=;i--)
if (pre[i]!=i)
{
du[pre[i]]+=du[i];
du[i/pre[i]]+=du[i];
du[i]=;
}
ans.a[]=;ans.len=;
for (i=;i<=;i++)
if (du[i]>)
{
for (j=;j<=du[i];j++)
ans*=i;
}
ans.print();
}
[HNOI2008]明明的烦恼的更多相关文章
- BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)
题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...
- bzoj1005 [HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3032 Solved: 1209 Description ...
- 【bzoj1005】[HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4175 Solved: 1660[Submit][Stat ...
- BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2248 Solved: 898[Submit][Statu ...
- BZOJ 1005: [HNOI2008]明明的烦恼( 组合数学 + 高精度 )
首先要知道一种prufer数列的东西...一个prufer数列和一颗树对应..然后树上一个点的度数-1是这个点在prufer数列中出现次数..这样就转成一个排列组合的问题了.算个可重集的排列数和组合数 ...
- 【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)
[BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> ...
- 【BZOJ 1005】 1005: [HNOI2008]明明的烦恼 (prufer数列+高精度)
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4981 Solved: 1941 Description ...
- BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5786 Solved: 2263[Submit][Stat ...
- 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度
[BZOJ1005][HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可 ...
随机推荐
- DEVC使用问题集锦
一.DEVC++编译出现"Id return 1 exit status" 这是初学者刚用DEVC经常碰到问题,一般有如下解决方法: 1.首先检查下是否有c的exe程序开着,若开着 ...
- CPP链表示例
#include<iostream> #include<stdlib.h> using namespace std; typedef struct Student_data { ...
- Flask 学习 四 数据库
class Role(db.Model): __tablename__='roles' id = db.Column(db.Integer,primary_key=True) name = db.Co ...
- css的内容
块级元素和行内元素的区别: 1. 行内元素部不能够设置宽度和高度.行内元素的宽度和高度是标签内容的宽度和高度.块级元素可以设置宽度和高度. 2. 块级元素会独占一行.而行内元素却部能够独占一行,只能和 ...
- 一个页面多个HTTP请求 页面卡顿!
用promise解决 前两天面试的时候 一个面试官问到这样一个问题 这里先说出解决的路径 这几天会更新具体的做法 或者直接参考廖雪峰大神 地址如下: https://www.liaoxuefeng.c ...
- python 学习笔记
1. 关于两者详细解释,参考链接:www.crifan.com/python_re_search_vs_re_findall/ 代码图
- 儿童节,我们从零开始——Python入门资源推荐
原创 2017-06-01 玄魂工作室 玄魂工作室 今天是六一儿童节,首先祝所有的小朋友身体健康,能永远生活在一个没有战争,没有压迫的世界里,永远快乐. 上一篇文章,很多人都对Python的各种书籍感 ...
- Python内置函数(61)——eval
英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...
- Spring Security入门(2-2)Spring Security 的运行原理 2
- C++中构造函数的初始化列表(const、引用&变量初始化)
1. 构造函数执行分为两个阶段: a.初始化阶段(初始化) 初始化阶段具体指的是用构造函数初始化列表方式来初始化类中的数据成员. ClassXX:val(a),key(b){}; b.普通计算阶段(赋 ...