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}
\]

代码如下:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,cnt,a[1010],sum,tot;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
struct node{
int num[10100],len;
node(){
memset(num,0,sizeof(num));
len=1;
}
node operator *(const int &x)const{
node ans;
ans.len=len+6;
for(int i=1;i<=len;i++)ans.num[i]+=num[i]*x;
for(int i=1;i<ans.len;i++){
if(ans.num[i]>9){
ans.num[i+1]+=ans.num[i]/10;
ans.num[i]%=10;
}
}
while(!ans.num[--ans.len]);
return ans;
}
node operator /(const int &x)const{
node ans;
ans=*this;
++ans.len;
for(int i=ans.len;i;i--){
ans.num[i-1]+=ans.num[i]%x*10;
ans.num[i]/=x;
}
while(!ans.num[--ans.len]);
return ans;
}
}ans;
int main(){
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
if(!a[i])return cout<<"0",0;
else if(a[i]!=-1)sum+=a[i]-1,++cnt;
}
if(sum>2*n-2)return cout<<"0",0;
ans.num[1]=1;
for(int i=n-1-sum;i<n-1;i++)ans=ans*i;
for(int i=1;i<=n-2-sum;i++)ans=ans*(n-cnt);
for(int i=1;i<=n;i++)for(int j=2;j<=a[i]-1;j++)
ans=ans/j;
for(int i=ans.len;i;i--)cout<<ans.num[i];
return 0;
}

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. WIFI-Pumpkin无线钓鱼渗透

    WIFI-Pumpkin无线钓鱼渗透 描述 WiFi-Pumpkin是一款专用于无线环境渗透测试的完整框架,利用该工具可以伪造接入点完成中间人攻击,同时也支持一些其他的无线渗透测试功能.旨在提供更安全 ...

  2. Java设计模式之单例模式理解

    前言 本片博客主要记录Java23种设计模式中的创建型模式中的单例模式.单例模式可分为两类,一种是饿汉式,一种是懒汉式.饿汉式的三种设计方式(静态变量方式.静态代码块方式.枚举方式),懒汉式(单锁检查 ...

  3. 为什么你需要在用 Vue 渲染列表数据时指定 key

    本文改写整理自一篇博文,原文链接如下: Why you should use the key directive in Vue.js with v-for Application state and ...

  4. 什么是内部类? Static Nested Class 和 Inner Class的不同?

    内部类就是在一个类的内部定义的类,内部类中不能定义静态成员. 内部类作为其外部类的一个成员,因此内部类可以直接访问外部类的成员.但有一点需要指出:静态成员不能访问非静态成员,因此静态内部类不能访问外部 ...

  5. Listener是什么?有什么作用?

    Listener是指Servlet中的监听器. Listener可以对ServletContext对象.HttpSession对象.ServletRequest对象进行监听.

  6. C# 如何让new 出来的form显示在最外层?

    /// <summary> /// 显示比对不同点的位置 /// </summary> public void showDiffImage() { //在此处弹出不一样图 Bi ...

  7. 什么是 Future?

    在并发编程中,我们经常用到非阻塞的模型,在之前的多线程的三种实现中,不 管是继承 thread 类还是实现 runnable 接口,都无法保证获取到之前的执行结果. 通过实现 Callback 接口, ...

  8. 数据分析之Pandas操作

    Pandas pandas需要导入 import pandas as pd from pandas import Series,DataFrame import numpy as np 1 Serie ...

  9. 百度移动统计调用api教程,少进坑(82001错误)

    相信很多小伙伴使用了百度统计,来查看自己应用使用的情况,但是会发现百度移动统计在官网没有api调用取数据的接口, 现在我就以自己成功调用api并且成功拿到数据,将这个步骤给大家参考,(末尾有调用移动统 ...

  10. Rust 中的数据布局--可选的数据布局

    Rust 允许你指定不同于默认的数据布局策略,并为你提供了不安全代码指南. repr(C) 这是最重要的"repr".它的意图相当简单:做 C 所做的事.字段的顺序.大小和对齐方式 ...