题目链接:戳我

prufer序列的问题。

prufer序列和无根树是一一对应的。而且在树中度数为k的点,在prufer序列中的出现次数为\(k-1\)次。

根据有限制次数的可重复元素的排列计数公式,我们可以知道答案是\(\frac{(n-2)!}{(du[1]-1)\times (du[2]-1)\times ... \times (du[n]-1)}\)

因为乘法中间可能会爆long long,所以采用分解质因数的方式。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define MAXN 100010
using namespace std;
int n,m,tot,cnt;
int d[MAXN],num[MAXN],prime[MAXN];
long long ans=1;
long long s[MAXN];
inline bool check(int x)
{
for(int i=2;i<=sqrt(x);i++)
if(x%i==0) return false;
return true;
}
inline void get_prime()
{
for(int i=2;i<=150;i++)
if(check(i))
prime[++cnt]=i;
}
inline void solve(long long x,int f)
{
for(int i=1;i<=cnt;i++)
{
if(x<=1) return;
while(x%prime[i]==0)
num[i]+=f,x/=prime[i];
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
s[1]=1;
for(int i=2;i<=22;i++) s[i]=s[i-1]*i;
get_prime();
scanf("%d",&n);
if(n==1)
{
int x;
scanf("%d",&x);
if(!x) printf("1\n");
else printf("0\n");
return 0;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&d[i]);
if(!d[i]){printf("0\n");return 0;}
d[i]--;
tot+=d[i];
}
if(tot!=n-2){printf("0\n");return 0;}
solve(s[n-2],1);
for(int i=1;i<=n;i++) solve(s[d[i]],-1);
for(int i=1;i<=cnt;i++)
while(num[i]--)
ans*=prime[i];
printf("%lld\n",ans);
return 0;
}

这个题是明明的烦恼的弱化版。

不过如果会做这个题,应该也会做那个题了。

现在我们只知道cnt个点的最终度数,我们假设\(sum=\sum_{i=1}^n (du[i]-1)\)那么现在的prufer序列的种类数应该是\(C_{n-2}^{sum}\times \frac{sum!}{\prod_{i=1}^{cnt} (du[i]-1)!}\)

而剩下来还有\(n-2-sum\)个位置,每个位置都可以填入除了cnt这些点的其他所有点,所以刚才的式子乘上一个\((n-cnt)^{n-2-sum}\)就行了。

HNOI2004 树的计数 | HNOI2008 明明的烦恼的更多相关文章

  1. 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度

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

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

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

  3. 【算法】Prüfer编码 —— HNOI2004树的计数

    的确,如果不知道这个编码的话的确是一脸懵逼.在这里放一篇认为讲的很详细的 BLOG,有关于编码的方式 & 扩展在里面都有所提及. 欢迎点此进入 --> 大佬的博客 在这里主要想推导一下最 ...

  4. Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数

    最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可 ...

  5. 「BZOJ1005」[HNOI2008] 明明的烦恼

    「BZOJ1005」[HNOI2008] 明明的烦恼 先放几个prufer序列的结论: Prufer序列是一种对有标号无根树的编码,长度为节点数-2. 具体存在无根树转化为prufer序列和prufe ...

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

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

  7. BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)

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

  8. bzoj1005 [HNOI2008]明明的烦恼

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

  9. 【bzoj1005】[HNOI2008]明明的烦恼

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

随机推荐

  1. Codeforces 1239C. Queue in the Train

    传送门 事实上就是模拟 搞一个优先队列维护一下事件结构体:时间,人的编号,入队还是出队 再维护两个 $set$ ,队列内的人 $inQueue$ ,想要进入队列内的人 $want$ 然后模拟模拟模拟! ...

  2. 解决github pages和github .md文件图片不显示

    博客园上传的图片,在github上无法显示. 在github项目下建立img文件夹,放上图片 两种方式 项目绝对路径 https://raw.githubusercontent.com/用户名/项目名 ...

  3. Bootstrap3基础教程 02 网格布局

    Bootstrap 提供了一套响应式.移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多列. 网页设计中的网格布局作用:组织内容,让网站易于浏览,并降低用户端 ...

  4. MVC4学习要点记一

    强类型的辅助方法:这些helper的特征是名称后面加上了 For , 这些叫做强类型的辅助方法. 共用布局页:可以在Views文件夹下面新建一个视图页,命名为_ViewStart.cshtml,将这部 ...

  5. js之运算符(关系运算符)

    关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或者是false.关系表达式总是返回一个布尔值. 具有如下8个关系运算符:大于(>),小于(<),小于等于(<=), ...

  6. PHP敏感词替换

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  7. Java高并发程序设计学习笔记(十):并发调试和JDK8新特性

    转自:https://blog.csdn.net/dataiyangu/article/details/87631574 多线程调试的方法使用Eclipse进行多线程调试线程dump及分析分析死锁案例 ...

  8. JVM学习笔记(一):Java虚拟机和虚拟机内存区域

    为什么Java程序需要运行在虚拟机上 因为Java在设计之初的跨平台特性,我们知道Java程序是运行在Java虚拟机上的.如果你要问为什么Java程序要运行在虚拟机上,我可以反问你几个问题. 为什么买 ...

  9. NB-IOT无线帧结构和下行物理信道

    NB-IOT Downlink OFDM参数 1.下行基于OFDMA, FF点数=128,基带采样速率1.92MHz,子载波间距15kHz,有效带宽180kHz=1PRB OFDMA: 正交频分多址, ...

  10. YII2-按需加载并管理静态资源(CSS,JS)

    参考博客: https://segmentfault.com/a/1190000003742452#articleHeader5