#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int N;
int A[],D[],cnt=;
int sum=,q=;
int pri[];
int ans[],len;
int main(){
scanf("%d",&N);
if(N==){
int tmp;
scanf("%d",&tmp);
if(!tmp||tmp==-) puts("");
else puts("");
return ;
}
for(int i=;i<=N;i++){
scanf("%d",&A[i]);
if(!A[i]){
puts("");
return ;
}
if(A[i]!=-){
D[++cnt]=A[i]-;
sum+=D[cnt];
}
else q++;
}
if(N<sum+){
puts("");
return ;
}
for(int i=;i<=cnt;i++)
for(int j=;j<=D[i];j++){
int tmp=j;
for(int k=;k<=j&&tmp!=;k++)
while(tmp%k==){
pri[k]--;
tmp/=k;
}
}
for(int i=N--sum+;i+<=N;i++){
int tmp=i;
for(int j=;j<=i&&tmp!=;j++)
while(tmp%j==){
pri[j]++;
tmp/=j;
}
}
ans[]=;
len=;
for(int i=;i<=N;i++){
while(pri[i]){
for(int j=;j<=len;j++) ans[j]*=i;
for(int j=;j<=len;j++){
ans[j+]+=ans[j]/;
ans[j]%=;
}
while(ans[len+]){
len++;
ans[len+]+=ans[len]/;
ans[len]%=;
}
pri[i]--;
}
}
for(int i=;i++sum<=N;i++){
for(int j=;j<=len;j++) ans[j]*=q;
for(int j=;j<=len;j++){
ans[j+]+=ans[j]/;
ans[j]%=;
}
while(ans[len+]){
len++;
ans[len+]+=ans[len]/;
ans[len]%=;
}
}
for(int i=len;i>=;i--) printf("%d",ans[i]);
return ;
}

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1005

一个prufer序列可以唯一确定一棵生成树。而prufer序列可以确定节点的度数,反过来,通过度数就可以确定prufer序列的方案数。

具体怎么做贴个黄学长的题解接跑吧……

题解:http://hzwer.com/3272.html

[BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度的更多相关文章

  1. 【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)

    [BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> ...

  2. [HNOI2008]明明的烦恼(prufer序列,高精度,质因数分解)

      prufer序列 定义 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2. 描述 eg 将 ...

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

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

  4. 【BZOJ 1005】 1005: [HNOI2008]明明的烦恼 (prufer数列+高精度)

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

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

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

  6. 【洛谷2624_BZOJ1005】[HNOI2008] 明明的烦恼(Prufer序列_高精度_组合数学)

    题目: 洛谷2624 分析: 本文中所有的 "树" 都是带标号的. 介绍一种把树变成一个序列的工具:Prufer 序列. 对于一棵 \(n\) 个结点的树,每次选出一个叶子(度数为 ...

  7. BZOJ1005:[HNOI2008]明明的烦恼(组合数学,Prufer)

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

  8. 2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?)

    2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?) [P2624 HNOI2008]明明的烦恼 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn ...

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

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

随机推荐

  1. android WIFI信息获取

    在androi中WIFI信息的获取能够通过系统提供的WIFI Service获取 [java]  WifiManager wifi_service = (WifiManager)getSystemSe ...

  2. vsCode 常用快捷键(mac 版)

    光标多行显示: commond+Alt+topArrow/downArrow 查找:commond+F 查找并按顺序切换下一个:commond+G 跳转到某一行: ctrl+G 输入行号跳转 跳转到某 ...

  3. 浅谈JavaScript的面向对象程序设计(三)

    前面已经对JavaScript的面向对象程序设计作了简单的介绍,包括了对象的属性.对象的工厂模式.构造函数和原型等.通过介绍,这些创建对象的方法依然有不少优化和改进的地方. 组合使用构造函数模式和原型 ...

  4. Flask采用Virtualenv+Supervisor+Nginx部署应用

    Flask采用Virtualenv+Supervisor+Nginx部署应用 -- 首先是概念解释 WSGI服务器,负责我们的app与服务器的交互,常用的有Gunicorn Web服务器,是个HTTP ...

  5. UPDATE command denied DELETE

    可用磁盘空间不足 支持SELECT information_schema. TABLES

  6. 显示 目录 大小 du

    [root@hadoop1 /]# du -BG  -d 11G ./boot0G ./dev63G ./homedu: 无法访问"./proc/6689/task/6689/fd/4&qu ...

  7. mysql workbench快捷键

    注释/取消注释, ctrl+/   暂时不知道怎么设置(原配置是 ctrl+divide)格式化sql语句(美化sql语句), ctrl+b

  8. mysql16---读写分离

    读写分离(负载平衡)(读写分离肯定要用到主从复制) 如果数据库压力很大,一台机器支撑不了,那么可以用mysql复制实现多台机器同步,将数据库的压力分散. 分表不能解决并发量大的问题. Sql语句发过来 ...

  9. bzoj3330: [BeiJing2013]分数

    口胡 题目hint都给你是一个三分函数了 还不会上三分套三分吗 exp函数又卡 精度又卡 什么sb毒瘤题 浪费时间

  10. eclipse自动创建项目出错Cannot change version of project facet Dynamic Web Module to 2.3.

    Cannot change version of project facet Dynamic Web Module to 2.3. step1:修改properties step2:修改web.xml ...