Description

一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵。给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数。


Solution

答案为 ∏(nd1−1)(n−d1+1d2)… ∏ ( n d 1 − 1 ) ( n − d 1 + 1 d 2 ) … \prod \binom{n}{d_1-1}\binom{n-d_1+1}{d_2}\dots
由于答案比较大但n只有150,我们可以把 1517 151 7 151^7作为模数,用欧拉定理处理逆元即可。


Code

/************************************************* Au: Hany01* Date: Jul 10th, 2018* Prob: BZOJ1211 树的计数* Email: hany01@foxmail.com* Inst: Yali High School
************************************************/#include<bits/stdc++.h>using namespace std;typedef long long LL;
typedef pair<int, int> PII;
#define File(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout)
#define rep(i, j) for (register int i = 0, i##_end_ = (j); i < i##_end_; ++ i)
#define For(i, j, k) for (register int i = (j), i##_end_ = (k); i <= i##_end_; ++ i)
#define Fordown(i, j, k) for (register int i = (j), i##_end_ = (k); i >= i##_end_; -- i)
#define Set(a, b) memset(a, b, sizeof(a))
#define Cpy(a, b) memcpy(a, b, sizeof(a))
#define x first
#define y second
#define pb(a) push_back(a)
#define mp(a, b) make_pair(a, b)
#define ALL(a) (a).begin(), (a).end()
#define SZ(a) ((int)(a).size())
#define INF (0x3f3f3f3f)
#define INF1 (2139062143)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define y1 wozenmezhemecaiatemplate <typename T> inline bool chkmax(T &a, T b) { return a < b ? a = b, 1 : 0; }
template <typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; }inline int read()
{register int _, __; register char c_;for (_ = 0, __ = 1, c_ = getchar(); c_ < '0' || c_ > '9'; c_ = getchar()) if (c_ == '-') __ = -1;for ( ; c_ >= '0' && c_ <= '9'; c_ = getchar()) _ = (_ << 1) + (_ << 3) + (c_ ^ 48);return _ * __;
}const int maxn = 155;int n, pi, res;
LL Mod, xt, fac[maxn], ifac[maxn], Ans = 1;inline LL mult(LL a, LL b) {LL Ans = 0;for ( ; b; b >>= 1, (a = a + a) %= Mod) if (b & 1) (Ans += a) %= Mod;return Ans;
}inline LL Pow(LL a, LL b) {LL Ans = 1;for ( ; b; b >>= 1, a = mult(a, a)) if (b & 1) Ans = mult(Ans, a);return Ans;
}inline LL C(int n, int m) { if (n < m) return 0; return mult(fac[n], mult(ifac[m], ifac[n - m])); }int main()
{
#ifdef hany01File("bzoj1211");
#endifn = read();if (n == 1) {if (!read()) puts("1"); else puts("0");return 0;}Mod = 151ll * 151ll * 151ll * 151ll * 151ll * 151ll * 151ll;fac[0] = 1;For(i, 1, n) fac[i] = mult(fac[i - 1], i);xt = Pow(151, 6) * 150 - 1, ifac[n] = Pow(fac[n], xt);Fordown(i, n, 1) ifac[i - 1] = mult(ifac[i], i);res = n - 2;For(i, 1, n) Ans = mult(Ans, C(res, pi = (read() - 1))), res -= pi;if (res != 0) puts("0");else printf("%lld\n", Ans);return 0;
}
//多情只有春庭月,犹为离人照落花。
//    -- 张泌《寄人》

【BZOJ1211】【HNOI2004】树的计数(prufer序,组合数)相关推荐

  1. bzoj1211 [HNOI2004]树的计数 prufer序列+组合数

    如果独自去想出prufer序列实在太难了 所以就只能直接用结论,把树转成prufer序列后这棵树和prufer序列是一一对应的关系 树->prufer序列:每次找到所有叶子结点中编号最小的,删掉 ...

  2. bzoj 1211 [HNOI2004]树的计数

    [HNOI2004]树的计数 Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, ...

  3. BZOJ 1211: [HNOI2004]树的计数 purfer序列

    1211: [HNOI2004]树的计数 Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给 ...

  4. bzoj1211: prufer序列 | [HNOI2004]树的计数

    题目大意: 告诉你树上每个节点的度数,让你构建出这样一棵树,问能够构建出树的种树 这里注意数量为0的情况,就是 当 n=1时,节点度数>0 n>1时,所有节点度数相加-n!=n-2 可以通 ...

  5. 最小生成树、矩阵树定理、Prufer序列总结

    Kruskal算法 按边权排序,从小到大合并不在同一集合两点即可 Prim算法 每次加入一个到当前已选点集最近的点 P2619 [国家集训队]Tree I 考虑二分,每次给白边加上一个mid,通过这种 ...

  6. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  7. 树的计数 Prüfer编码与Cayley公式 学习笔记

    最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...

  8. 算法与数据结构07:前缀树,计数排序与桶排序

    算法与数据结构07:前缀树,计数排序与桶排序 前缀树 计数排序 桶排序 前缀树 Trie 1.根据字符串数组中,每个字符串的字符作为路径,组成而成的一个多叉树结构 2.每个节点都有一个paths数组, ...

  9. P2290-[HNOI2004]树的计数【组合数,Prufer序列】

    正题 题目大意:https://www.luogu.org/problem/P2290 题目大意 一棵树无根树第iii个点的度数为did_idi​,求树的数量. 解题思路 更具pruferprufer ...

最新文章

  1. 恢复IE8自带的源代码查看器
  2. python安装opencv2.4.9_Python学习之一:Python2.7与opencv2.4安装配置
  3. WP7中对ListBox的ItemTemplate中子元素的后台操作
  4. c语言如何调用外部文件的函数调用,keil 中如何调用其他文件的函数
  5. mysql数据库用doc命令,myMySQL数据库怎么使用dos命令安装? MySQL数据库使用教程
  6. 谈:典型三种近场通信的特点以及未来趋势
  7. python开源管理系统_基于Python开源框架Flask的地震信息网络运维管理系统实现
  8. 关于MATLAB未定义函数或变量 ‘wavread‘的很简单的解决办法
  9. Modern CMake 简介
  10. 北京市基本医疗保险定点医院名单
  11. java put方法_java 实现Put request
  12. java英文参考文献_java英文参考文献
  13. 第四章 账号权限管理
  14. e4a mqtt 类库 开发 安卓 mqtt apk 安卓mqtt客户端开发
  15. django连接mariadb
  16. ground truth 到底是什么意思???
  17. jsp观影平台/影视观看系统/视频网站
  18. replace 与 replaceAll
  19. [转]驾驭你的“职场布朗运动”
  20. 如何彻底卸载绿盟终端DLP

热门文章

  1. 大话设计模式:模板方法模式
  2. natapp搭建外网服务器
  3. 李银河应该重读王小波《摆脱童稚状态》--尼伯龙根·蜗藤
  4. SMB Signing not required
  5. 戴尔服务器虚拟机巨兽龙在哪,dell服务器安装的vmware esxi 虚拟机紫萍
  6. 你好,WeDataSphere!
  7. FPGA平台开发基础
  8. python 制作正态分布图,画出拒绝域
  9. KeyShot中的半透明材质怎样来创建液体
  10. [置顶] 跳槽前夕的三年总结