http://www.lydsy.com/JudgeOnline/problem.php?id=1005

答案是$$\frac{(n-2)!}{(n-2-sum)!×\prod_{i=1}{cnt}(d[i]-1)!}×(n-cnt){n-2-sum}$$

\[sum=\sum_{i=1}^{cnt}(d[i]-1)
\]

用到了prufer编码,参考http://www.cnblogs.com/zhj5chengfeng/p/3278557.html

注意要写高精度!

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; typedef long long ll;
const int N = 1003; bool notp[N];
int cnt = 0, n, d[N], num = 0, prime[N], sum = 0, tot[N]; void shai() {
for (int i = 2; i <= n; ++i) {
if (!notp[i]) prime[++num] = i;
for (int j = 1; j <= num && i * prime[j] <= n; ++j) {
notp[i * prime[j]] = true;
if (i % prime[j] == 0)
break;
}
}
} void add(int x, int flag) {
for (int i = 1; i <= num && x != 1; ++i)
if (x % prime[i] == 0)
while (x % prime[i] == 0) {
tot[i] += flag;
x /= prime[i];
}
} ll ipow(int x, int b) {
ll w = x, r = 1;
while (b) {
if (b & 1) r *= w;
w = w * w;
b >>= 1;
}
return r;
} struct Big {
int a[10003], len;
Big() {memset(a, 0, sizeof(a)); len = 0;}
Big operator * (const int &b) const {
Big C;
for (int i = 1; i <= len; ++i) {
C.a[i] += a[i] * b;
C.a[i + 1] += C.a[i] / 10;
C.a[i] %= 10;
}
C.len = len;
while (C.a[C.len + 1] != 0) {
++C.len;
C.a[C.len + 1] = C.a[C.len] / 10;
C.a[C.len] %= 10;
}
return C;
}
}; int main() {
scanf("%d", &n);
int dd;
for (int i = 1; i <= n; ++i) {
scanf("%d", &dd);
if (dd != -1)
d[++cnt] = dd, sum += dd - 1;
}
shai(); if (n == 1) {
puts(dd > 0 ? "0" : "1");
return 0;
} if (sum > n - 2) {
puts("0");
return 0;
} int down = n - 2 - sum;
for (int i = n - 2; i > down; --i) add(i, 1);
for (int i = 1; i <= cnt; ++i)
for (int j = d[i] - 1; j > 1; --j)
add(j, -1);
add(n - cnt, down); Big ans; ans.len = 1; ans.a[1] = 1;
for (int i = 1; i <= num; ++i)
for (int j = tot[i]; j >= 1; --j)
ans = ans * prime[i];
for (int i = ans.len; i >= 1; --i)
putchar('0' + ans.a[i]);
puts("");
return 0;
}

【BZOJ 1005】【HNOI 2008】明明的烦恼的更多相关文章

  1. [bzoj 1005][HNOI 2008]明明的烦恼(prufer数列+排列组合)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1005 分析: 首先prufer数列:http://baike.baidu.com/view/1 ...

  2. 【BZOJ 1005】[HNOI2008]明明的烦恼

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

  3. [BZOJ1005](HNOI 2008)明明的烦恼

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

  4. 【BZOJ 1005】[HNOI2008]明明的烦恼(暴力化简法)

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1005 [题意] 中文题 [题解] 一棵节点上标有序号的树会和一个prufer数列唯一对 ...

  5. 【BZOJ 1005】[HNOI2008]明明的烦恼(化简的另一种方法)

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1005 [题意] [题解] 题目和题解在上一篇; 这里 对 [(m^(n-2-tot)) ...

  6. [bzoj 1004][HNOI 2008]Cards(Burnside引理+DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 分析: 1.确定方向:肯定是组合数学问题,不是Polya就是Burnside,然后题目上 ...

  7. BZOJ 1009 HNOI 2008 GT考试 递推+矩乘

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3679  Solved: 2254[Submit][Statu ...

  8. BZOJ 1007 HNOI 2008 水平可见直线 计算几何+栈

    题目大意:给出一些笛卡尔系中的一些直线,问从(0,+∞)向下看时能看到哪些直线. 思路:半平面交可做,可是显然用不上. 类似于求凸包的思想,维护一个栈. 先将全部直线依照k值排序.然后挨个压进去,遇到 ...

  9. [bzoj 1010][HNOI 2008]玩具装箱

    传送门 Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号 ...

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

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

随机推荐

  1. PHP如何实现网址伪静态

    Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态. 主要步骤如下: 1.检测Apache是否开启mod_rewrite功能     可以通过php提供 ...

  2. Java集合-Python数据结构比较

    Java list与Python list相比较 Java List:有序的,可重复的.(有序指的是集合中对象的顺序与添加顺序相同) Python list(列表)是有序的,可变的. Java Lis ...

  3. linux下操作问题与总结

    一. 出现问题 :从服务器244里拷贝ajun文件到自己linux下, 出现ajun: not a regular file?      解决方案:在进行scp传输“文件夹”的时候,加上参数r. 二. ...

  4. Css3新特性总结之边框与背景(二)

    一.条纹背景 利用background为linear-gradient函数实现,linear-gradient取值如下: <angle>:角度,渐变的方向 to left right to ...

  5. SVG颜色、渐变和填充

    颜色 RGB和HSL都是CSS3支持的颜色表示方法,一般普遍使用是RGB.PS:HSL浏览器兼容. RGB RGB即是代表红.绿.蓝三个通道的颜色,通过对红(R).绿(G).蓝(B)三个颜色通道的变化 ...

  6. JMeter使用文档

    JMeter使用文档 1.JMeter安装步骤 1.1Windows环境 a.安装jdk(对应windows系统位数) http://www.oracle.com/technetwork/java/j ...

  7. SDK接入(3)之iOS内支付(In-App Purchase)接入

    SDK接入(3)之iOS内支付(In-App Purchase)接入 继整理了Android平台的SDK接入过程.再来分享下iOS平台的内支付(In-App Purchase)接入,作为笔者在游戏开发 ...

  8. 在终端terminal运行ReactNative程序经常出现的问题

    各种问题汇总: 1.Unable to resolve modules lodash  (这里举例lodash,这个lodash也可以是别的.意思就是缺少当前模块,所以需要安装) npm instal ...

  9. Android面试题--事件处理

    1.Handler 机制 Android 中主线程也叫 UI 线程,那么从名字上我们也知道主线程主要是用来创建.更新 UI 的,而其他耗时操作,比如网络访问,或者文件处理,多媒体处理等都需要在子线程中 ...

  10. Android 面试题--Service

    1.Service 是否在 main thread 中执行, service 里面是否能执行耗时的操作?默认情况,如果没有显示的指 servic 所运行的进程, Service 和 activity ...