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

[P2624 HNOI2008]明明的烦恼 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

重点:

1.prufer序列

2.组合数学

题意:

n个点,有部分点已经确定度数,有的随意,问有多少棵树满足已知度数要求。

分析:

还能分析个锤子出来,prufer序列啊,记得开高精,杨辉三角被我玩儿废了,搞不定,我太菜了。

设已知度数的点有k个,总度数-k为s,一共有n个点。

则这k个点能形成的树的个数为

\[\frac{s!}{\prod_{i=1}^{k}{(a_i-1)!}}
\]

因为是n-2个点中随意选s个点(暂时把这些所有的点看成不同的点),所以还要再乘上下面一坨东东

\[C_{n-2}^{s}
\]

最后还要乘上其它n-2-k个数的随机排列

\[(n-k)^{n-2-s}
\]

所以总公式为

\[C_{n-2}^{s}*\frac{s!}{\prod_{i=1}^{k}{(a_i-1)!}}*(n-k)^{n-2-s}
\]

代码如下:

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. using namespace std;
  6. int n,cnt,a[1010],sum,tot;
  7. inline int read(){
  8. int s=0,w=1;
  9. char ch=getchar();
  10. while(ch<'0'||ch>'9'){
  11. if(ch=='-')w=-1;
  12. ch=getchar();
  13. }
  14. while(ch<='9'&&ch>='0'){
  15. s=s*10+ch-'0';
  16. ch=getchar();
  17. }
  18. return s*w;
  19. }
  20. struct node{
  21. int num[10100],len;
  22. node(){
  23. memset(num,0,sizeof(num));
  24. len=1;
  25. }
  26. node operator *(const int &x)const{
  27. node ans;
  28. ans.len=len+6;
  29. for(int i=1;i<=len;i++)ans.num[i]+=num[i]*x;
  30. for(int i=1;i<ans.len;i++){
  31. if(ans.num[i]>9){
  32. ans.num[i+1]+=ans.num[i]/10;
  33. ans.num[i]%=10;
  34. }
  35. }
  36. while(!ans.num[--ans.len]);
  37. return ans;
  38. }
  39. node operator /(const int &x)const{
  40. node ans;
  41. ans=*this;
  42. ++ans.len;
  43. for(int i=ans.len;i;i--){
  44. ans.num[i-1]+=ans.num[i]%x*10;
  45. ans.num[i]/=x;
  46. }
  47. while(!ans.num[--ans.len]);
  48. return ans;
  49. }
  50. }ans;
  51. int main(){
  52. n=read();
  53. for(int i=1;i<=n;i++){
  54. a[i]=read();
  55. if(!a[i])return cout<<"0",0;
  56. else if(a[i]!=-1)sum+=a[i]-1,++cnt;
  57. }
  58. if(sum>2*n-2)return cout<<"0",0;
  59. ans.num[1]=1;
  60. for(int i=n-1-sum;i<n-1;i++)ans=ans*i;
  61. for(int i=1;i<=n-2-sum;i++)ans=ans*(n-cnt);
  62. for(int i=1;i<=n;i++)for(int j=2;j<=a[i]-1;j++)
  63. ans=ans/j;
  64. for(int i=ans.len;i;i--)cout<<ans.num[i];
  65. return 0;
  66. }

2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?)的更多相关文章

  1. 【bzoj1005】[HNOI2008]明明的烦恼 Prufer序列+高精度

    题目描述 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i ...

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

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

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

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

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

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

  5. 2021.07.19 P2294 狡猾的商人(差分约束)

    2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ...

  6. 2021.07.19 BZOJ2654 tree(生成树)

    2021.07.19 BZOJ2654 tree(生成树) tree - 黑暗爆炸 2654 - Virtual Judge (vjudge.net) 重点: 1.生成树的本质 2.二分 题意: 有一 ...

  7. Luogu P2624 [HNOI2008]明明的烦恼 Prufer+组合+高精

    好的我把标准版过了... 设$ r_i$为$i$的度数 首先,我们设 $ sum = \Sigma r_i-1$,$ tot $ 为所有能够确定度数的点 所以我们有 $ C ^ {sum} _{n-2 ...

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

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

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

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

随机推荐

  1. [SPDK/NVMe存储技术分析]009 - Introduction to RDMA Send | RDMA Send操作概论

    来源: https://zcopy.wordpress.com/ 说明: 本文不是对原文的逐字逐句翻译,而是摘取核心部分以介绍RDMA Send操作(后面凡是提到RDMA send, 都对应于IBA里 ...

  2. 两天入门SolidWorks2016

    视频:https://www.bilibili.com/video/BV1ub411c7ct 饭前甜点--基本设置 一.界面设置 1.1 调出文件栏 打开SOLIDWORKS 2016 x64 Edi ...

  3. MM32F0140的复位脚nRST复用成普通GPIO PA10功能

    目录: 1.MM32F0020简介 2.MM32F0020的复位脚nRST和PA10的说明 3.MM32F0020的选项字节说明 4.MM32F0020的FLASH_OBR选项字节寄存器说明 5.MM ...

  4. Python 字典(键值对)

    Python 字典(键值对) 创建字典 特性:字典中的键不能变,而且唯一 格式:变量名={"键1":值1,"键2":值2} 函数 作用 dict() 强制转换为 ...

  5. zookeeper的通知机制

    一.znode Zookeeper维护一个类似文件系统的数据结构.简单来说,有点类似windows中注册表的结构,有名称,有树节点,有Key(键)/Value(值)对的关系,可以看做一个树形结构的数据 ...

  6. 什么是Spring Cloud Bus?

    spring cloud bus 将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控. 如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置 ...

  7. 在Spring AOP 中,关注点和横切关注的区别是什么?

    关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能. 横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块 ...

  8. Correct the classpath of your application so that it contains a single, compatible version of org.springframework.util.Assert

    一.问题描述 今天启动springboot工程时,报上面的错误. 二.解决方法 加入如下pom: <dependency> <groupId>org.springframewo ...

  9. flink内存模型详解与案例

    任务提交时的一些yarn设置(通用客户端模式) 指定并行度                        -p 5 \ 指定yarn队列                     -Dyarn.appl ...

  10. CSDN博客步骤:

    在SCDN看到喜欢的文章想转载又嫌一个一个敲太麻烦,干脆直接收藏.但有时候作者把原文章删除或设置为私密文章后又看不了.所以还是转载来的好.这篇博文为快速转载博客的方法,亲测有效,教程如下. 原博客原址 ...