好的我把标准版过了。。。


设$ r_i$为$i$的度数

首先,我们设 $ sum = \Sigma r_i-1$,$ tot $ 为所有能够确定度数的点

所以我们有

$ C ^ {sum} _{n-2}  * \frac{sum!}{\Pi(r_i-1)!} *(n-tot)^{n-2-sum} $

$C ^ {sum} _{n-2}$ 表示从n-2个位置中选出sum个(因为他们肯定出现在$ Prufer$序列里)

$ \frac{sum!}{\Pi(r_i-1)!}$是多重集的排列

$(n-tot)^{n-2-sum} $ 是指拿剩下的n-tot个点,填在$Prufer$ 剩下的位置中

原式经化简为

$ \frac{(n-2)!}{(n-2-sum)!*\Pi(r_i-1)!}*(n-tot)^{n-2-sum}$

所以把他们分解质因数扔进去就好了

然后要用高精(第一次压位qwq)

#include<cstdio>
#include<iostream>
#include<cstring>
#define R register int
using namespace std;
const int B=,N=;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
struct Int {
int sz,dat[];
Int() {sz=; memset(dat,,sizeof(dat));}
inline void init(int vl) {
sz=; while(vl) ++sz,dat[sz]=vl%B,vl/=B;
} inline void print() {
printf("%d",dat[sz]);
for(R i=sz-;i;--i) printf("%04d",dat[i]);
}
};
Int operator *(Int a,int b) {
Int c; R lst=a.sz;
for(R i=;i<=lst;++i) c.dat[i]=a.dat[i]*b;
for(R i=;i<=lst;++i) c.dat[i+]+=c.dat[i]/B,c.dat[i]%=B;
while(c.dat[lst+]) ++lst,c.dat[lst+]+=c.dat[lst]/B,c.dat[lst]%=B;
c.sz=lst; return c;
}
Int ans;
int n,sum,tot;
int r[N],cnt[N];
inline void add(int x,int vl) {
for(R i=;i*i<=x;++i)
while(x%i==) x/=i,cnt[i]+=vl;
if(x>) cnt[x]+=vl;
}
signed main() { //freopen("1.in","r",stdin); freopen("out.out","w",stdout);
n=g(); for(R i=;i<=n;++i) {
r[i]=g(); if(r[i]==-) continue; ++tot,sum+=r[i]-;
} if(sum>n-) {printf("0\n"); return ;}
for(R i=n-;i;--i) add(i,);
for(R i=n--sum;i;--i) add(i,-);
for(R i=;i<=n;++i) {
if(r[i]==-) continue; for(R j=;j<r[i];++j) add(j,-);
} for(R i=;i<=n--sum;++i) add(n-tot,); ans.init();
for(R i=;i<=n;++i) for(R j=;j<=cnt[i];++j) ans=ans*i;
ans.print(); putchar('\n');
}

2019.05.16

Luogu P2624 [HNOI2008]明明的烦恼 Prufer+组合+高精的更多相关文章

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

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

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

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

  3. bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)

    [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5907  Solved: 2305[Submit][Status][Di ...

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

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

  5. [luogu2624 HNOI2008]明明的烦恼 (prufer+高精)

    传送门 Solution 根据prufer序列做的题,具体可以看这里 还知道了一种避免高精除的方法quq Code #include <cmath> #include <cstdio ...

  6. [BZOJ1005] [HNOI2008] 明明的烦恼 (prufer编码)

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

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

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

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

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

  9. BZOJ 1005 [HNOI2008]明明的烦恼 ★(Prufer数列)

    题意 N个点,有些点有度数限制,问这些点可以构成几棵不同的树. 思路 [Prufer数列] Prufer数列是无根树的一种数列.在组合数学中,Prufer数列是由一个对于顶点标过号的树转化来的数列,点 ...

随机推荐

  1. CH6B12 最优高铁环

    6B12 最优高铁环 0x6B「图论」练习 背景 幻影国建成了当今世界上最先进的高铁,该国高铁分为以下几类: S---高速光子动力列车---时速1000km/h G---高速动车---时速500km/ ...

  2. Oracle12c多租户如何启动关闭CDB或PDB (PDB自动启动)

    Oracle 数据库 12 c 中介绍了多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB).下面我们一起来启动和关闭容器数据库 (CDB) 和可插拔数据库 (PDB). ...

  3. BZOJ2120:数颜色

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  4. win32 获取 HotKey 控件中的内容(HKM_GETHOTKEY)

    windows给我们提供了一个对话框控件HotKey非常好用,在设置热键的时候用起来很爽,但是一直百度就是没找到在win32下怎样通过消息获取这个控件里面的内容,找到的都是用MFC封装好的控件类来操作 ...

  5. java blob 文件上传下载

    1.文件上传 pojo中为byte[] 类型,数据库中对应为blob类型. 主要代码: FileInputStream fis = null; fis = new FileInputStream(ne ...

  6. JVM体系结构之二:类加载器之2:JVM 自定义的类加载器的实现和使用

    一.回顾一下jdk自带的类加载器: 1.java虚拟机自带的加载器     根类加载器(Bootstrap,c++实现)     扩展类加载器(Extension,java实现)     应用类加载器 ...

  7. 问题:C#发布的项目浏览时出现“Server Application Unavailable”错误;结果:Server Application Unavailable出现的原因及解决方案小结

    Server Application Unavailable出现的原因及解决方案小结 作者: 字体:[增加 减小] 类型:转载 时间:2012-05-23 今天在服务器安装了个.net 4.0 fra ...

  8. tomcat solr 限制ip

    <Context path="/solr" reloadable="false" docBase="/var/www"> < ...

  9. Ok6410裸机驱动学习(一)开发工具

    1.GCC工具链 1.GCC默认处理的文件类型 文件类型 扩展名 文件说明 文本文件 *.c C语言源文件 *.C.*.cxx.*.cc C++源文件 *.i 预处理后的C语言源文件 *.ii 预处理 ...

  10. .NET后台控制网页标签的ICO图标

    aspx文件的head属性中增加runat="server" 后台cs文件中: /// <summary> /// 客户端注册ICO图标 /// </summar ...