直接考虑prufer序列,每个度数-1就是再n-2的序列中出现的次数

对于不确定的-1,每个没有填的位置都是有可能填的,所以直接离散用乘法原理

对于确定的就是组合数选位置,注意要开高精

对于高精除法的话就使用类似exlucas的方法提取因子,最后再乘

码:

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int ans[1999999],daan[1999999],i,j,n,lin,x,wz,jw,gs[1005][1005],cnt,k;
vector<int>v[1005];
void C(int a,int b)
{int i,j;if(b-a>a){for(i=b;i>b-a;i--){for(j=0;j<v[i].size();j++)ans[v[i][j]]+=gs[i][v[i][j]];    }for(i=1;i<=a;i++){  for(j=0;j<v[i].size();j++)ans[v[i][j]]-=gs[i][v[i][j]];} }else
{for(i=b;i>a;i--){for(j=0;j<v[i].size();j++)ans[v[i][j]]+=gs[i][v[i][j]];   }for(i=1;i<=b-a;i++){    for(j=0;j<v[i].size();j++)ans[v[i][j]]-=gs[i][v[i][j]];}
}
}
int main()
{scanf("%d",&n);
for(i=1;i<=n;i++)
{int lin2=i;for(j=2;j*j<=n;j++){if(lin2%j==0){lin=0;while(lin2%j==0)lin++,lin2/=j;   gs[i][j]=lin;v[i].push_back(j);}  }if(lin2!=1)gs[i][lin2]=1,v[i].push_back(lin2);
}
wz=n-2;for(i=1;i<=n;i++){scanf("%d",&x);if(x!=1){ if(x==-1)++cnt;else C(x-1,wz),wz-=(x-1);}}
daan[0]=1;
daan[1]=1;
ans[cnt]+=wz;
for(i=1;i<=n;i++)
{
for(j=1;j<=ans[i];j++)
{for(k=1;k<=daan[0];k++){long long o=jw+daan[k]*i;daan[k]=o%1000;jw=o/1000;      }while(jw)daan[++daan[0]]=jw%1000,jw/=1000;
}
}   for(i=daan[0];i>=1;i--){if(i!=daan[0]){if(daan[i]<100)printf("0");if(daan[i]<10)printf("0");    }printf("%d",daan[i]);    }
}

bzoj1005 [HNOI2008]明明的烦恼 prufer+组合数学相关推荐

  1. BZOJ1005 [HNOI2008]明明的烦恼

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

  2. BZOJ.1005.[HNOI2008]明明的烦恼(Prufer 高精 排列组合)

    题目链接 若点数确定那么ans = (n-2)!/[(d1-1)!(d2-1)!...(dn-1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n-2 ...

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

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5171  Solved: 2021 [Submit][St ...

  4. BZOJ 1005: [HNOI2008]明明的烦恼

    BZOJ 1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线 ...

  5. 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)

    点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道 ...

  6. 【BZOJ 1005】[HNOI2008]明明的烦恼 【Prufer序列】

    (1) 树的prufer编码的实现[1] 不断删除树中度数为1的最小序号的点,并输出与其相连的节点的序号直至树中只有两个节点 对应的prufer序列就是3,5,1,3. Data.in 6 5 1 3 ...

  7. 明明的烦恼(Prufer数列)

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

  8. 【BZOJ1005】【HNOI2008】明明的烦恼

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

  9. BZOJ-1005 明明的烦恼

    Prufer编码练习题,这个编码是跟树的生成计数有关系的. 推荐这篇博文:http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557 ...

最新文章

  1. mybatis 使用resultMap实现数据库的操作
  2. 【 MATLAB 】【 MATLAB 】DFT的性质讨论(三)序列的循环卷积及其 MATLAB 实现
  3. 机器人搬运礼盒程序_礼盒厂公司2020范文
  4. java 基本语法与流程控制_Java基础语法之控制流程
  5. Spring方法注入 @Lookup注解使用
  6. 19年8月 字母哥 第六章 生命周期内的拦截过滤与监听 用热点公司网不行
  7. 阶段项目:学生信息管理系统数据库设计
  8. 一切事物皆对象_基础篇
  9. 吸顶灯怎么固定天花板_吸顶灯怎么安装?家庭圆形吸顶灯底座安装步骤(图文解说)...
  10. 更新 FF.PyAdmin v1.2.4
  11. 帆软单点登录_平台系统单点登录接口
  12. phpstudy的安装及pikachu渗透平台的搭建
  13. GNURadio(一)
  14. python处理考勤数据_python连接中控考勤机分析数据
  15. Keil RTX 系统函数 定义
  16. 【OpenCV C++】照片修改像素(尺寸大小)
  17. TensorRT学习(1):通过pth生成wts文件
  18. 猴子排序算法_猴子排序-有史以来最慢的排序算法?
  19. Spring是什么意思?
  20. 【51Job数据爬取日志】前程无忧URL请求字段分析

热门文章

  1. HTML5锤子官网,美国ESTWING 一体化锻造羊角锤 非常好用的锤子
  2. href up test.php,test.php
  3. List的isEmpty与==null的区别
  4. poj 1847 Tram 最短路 dijkstra、floyed
  5. 解决Windows下运行出现ModuleNotFoundError: No module named xxx问题
  6. git 上传项目到linux仓库_总结:上传python项目至git上前的一些准备工作
  7. myeclipse的电商系统模板_电商市场分析怎么做?3分钟了解程序员必备分析软件...
  8. Java中使用JNA实现全局监听Linux键盘事件
  9. android权限机制6.0,Android6.0权限机制(二):封装
  10. python指数运算函数_分享Python中用于计算指数的exp()方法实例教程