Description

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

Input

  第一行为N(0 < N < = 1000),
接下来N行,第i+1行给出第i个节点的度数Di,如果对度数不要求,则输入-1

Output

  一个整数,表示不同的满足要求的树的个数,无解输出0

Sample Input


-
-

Sample Output


HINT

  两棵树分别为1-2-3;1-3-2

Solution

填昨天的坑

根据prufer定理,用排列组合推出ans=(n-2)!/[(D1-1)!(D2-1)!···(Dk-1)!left!] * m^left

其中left=(n-2)-(D1-1)-(D2-1)-···-(Dk-1)

哦,还要注意特判,当无解时,高精度数组长度为0,直接输出0就行了

PoPoQQQ的代码很优雅

Code:

#include <stdio.h>
#include <memory.h>
#define ll long long
struct num {
int top;
ll x[];
num(ll a=) {
memset(x,,sizeof x );
top=;
x[]=a; }
num operator*(const num b) {
num tmp;
for(int i=; i<=top; i++)
for(int j=; j<=b.top; j++)
tmp.x[i+j-]+=x[i]*b.x[j],
tmp.x[i+j]+=tmp.x[i+j-]/,
tmp.x[i+j-]%=;
tmp.top=top+b.top;
if(!tmp.x[tmp.top])
tmp.top--;
return tmp; } }ans();
void Q_pow(int x,int p) {
num tmp(x);
for(;p;p>>=,tmp=tmp*tmp)
if(p&)
ans=ans*tmp; }
int n,m,lef,cnt[];
void factorZ(int x,int d) {
for(int i=;i*i<=x;i++)
while(!(x%i))
cnt[i]+=d,
x/=i;
if(x^)cnt[x]+=d; }
int main() {
scanf("%d",&n);
lef=n-;
for(int i=;i<=lef;i++)
factorZ(i,);
for(int i=;i<=n;i++) {
int x;
scanf("%d",&x);
if(~x) {
if(x>) {
lef-=x-;
for(int i=;i<=x-;i++)
factorZ(i,-); } }
else ++m; }
for(int i=;i<=lef;i++)
factorZ(i,-);
factorZ(m,lef);
for(int i=;i<=n;i++)
if(cnt[i])
Q_pow(i,cnt[i]);
printf("%lld",ans.x[ans.top]);
for(int i=ans.top-;i;i--)
printf("%08lld",ans.x[i]);
return ; }

[bzoj1005][HNOI2008][明明的烦恼] (高精度+prufer定理)的更多相关文章

  1. bzoj1005: [HNOI2008]明明的烦恼(prufer+高精度)

    1005: [HNOI2008]明明的烦恼 题目:传送门 题解: 毒瘤题啊天~ 其实思考的过程还是比较简单的... 首先当然还是要了解好prufer序列的基本性质啦 那么和1211大体一致,主要还是利 ...

  2. BZOJ1005 HNOI2008明明的烦恼(prufer+高精度)

    每个点的度数=prufer序列中的出现次数+1,所以即每次选一些位置放上某个点,答案即一堆组合数相乘.记一下每个因子的贡献分解一下质因数高精度乘起来即可. #include<iostream&g ...

  3. [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int N; ...

  4. BZOJ1005:[HNOI2008]明明的烦恼(组合数学,Prufer)

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

  5. BZOJ 1005: [HNOI2008]明明的烦恼(高精度+prufer序)

    传送门 解题思路 看到度数和生成树个树,可以想到\(prufer\)序,而一张规定度数的图的生成树个数为\(\frac{(n-2)!}{\prod\limits_{i=1}^n(d(i)-1)!}\) ...

  6. 【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)

    [BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> ...

  7. 【BZOJ 1005】 1005: [HNOI2008]明明的烦恼 (prufer数列+高精度)

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

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

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

  9. bzoj1005 [HNOI2008]明明的烦恼

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

随机推荐

  1. ubuntu 12.04.5 LTS版本 更新 source.list

    更新后一定要:apt-get update # # deb cdrom:[Ubuntu-Server LTS _Precise Pangolin_ - Release amd64 (20140806. ...

  2. jQuery的each内部的break,continue

    // break, continue在each等迭代器里都不可用 // return false = break // return true = continue function isClicke ...

  3. bzoj1052覆盖问题(二分+贪心)

    1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2446  Solved: 1131[Submit][Stat ...

  4. P2476 [SCOI2008]着色方案

    传送门 数学太珂怕了--膜一下->这里 记\(sum[i]\)为题中\(c[i]\)的前缀和,\(C[i][j]\)表示\(C_{i}^j\) 设\(f[i][j]\)表示前面\(i\)中颜色已 ...

  5. loadrunner11 安装破解,汉化包

    说说自己的心痛史,好不容易安装了loadrunner 11 居然浏览器不支持,我的系统是win8.1,ie浏览器最低支持ie11,我还能说啥子...其他浏览器试过了依旧是不可以!!所以我安装了一个虚拟 ...

  6. hadoop2.x 常用端口及定义方法

    一 常用端口号 1 HDFS 2 YARN 3 HBase 4 Hive 5 ZooKeeper 二 Web UIHTTP服务 1 对于存在 Web UIHTTP服务的所有 hadoop daemon ...

  7. Spring 中 ApplicationContext 和 BeanFactory 的区别,以及 Spring bean 作用域

    //从ApplicationContext 中取 bean ApplicationContext ac = new ClassPathXmlApplicationContext ( "com ...

  8. [JOI2014] 小笼包

    题面 : https://www.ioi-jp.org/joi/2013/2014-yo/2014-yo-t6/2014-yo-t6.html 题解 dp + 康托展开 一看这题不知道怎么处理 只能枚 ...

  9. Android 性能优化(22)*性能工具之「Hierarchy Viewer」 Hierarchy Viewer Walkthrough

    Hierarchy Viewer Walkthrough 1.In this document Prerequisites Setting the ANDROID_HVPROTO variable W ...

  10. firefox浏览器中 bootstrap 静态弹出框中select下拉框不能弹出(解决方案)

    问题出现场景1: 在firefox浏览器中在bootstrap弹出的modal静态框中再次弹出一个静态框时 select下拉框不能弹出选项 解决方案:去掉最外层静态框的 tabindex=" ...