UVA 1264 - Binary Search Tree

题目链接

题意:给定一个序列,插入二叉排序树,问有多少中序列插入后和这个树是同样的(包含原序列)

思路:先建树,然后dfs一遍,对于一个子树而言,仅仅要保证左边和右边顺序对就能够了,所以种数为C(左右结点总数,左结点),然后依据乘法原理乘上左右子树的情况就可以

代码:

#include <cstdio>
#include <cstring> typedef long long ll; const int MAXNODE = 1111111; const int N = 21;
const int MOD = 9999991; int C[N][N]; struct BST {
struct Node {
int l, r, val, lsz, rsz;
Node() {l = 0, r = 0, val = -1; lsz = 0; rsz = 0;}
} node[MAXNODE]; int sz; void init() {
node[1] = Node();
sz = 2;
} void insert(int x, int v) {
if (node[x].val == -1) {
node[x].val = v;
return;
}
if (v < node[x].val) {
if (!node[x].l) {
node[sz] = Node();
node[x].l = sz++;
}
insert(node[x].l, v);
node[x].lsz++;
}
else {
if (!node[x].r) {
node[sz] = Node();
node[x].r = sz++;
}
insert(node[x].r, v);
node[x].rsz++;
}
} int dfs(int x) {
if (x == 0) return 1;
return (ll)dfs(node[x].l) * dfs(node[x].r) % MOD * C[node[x].lsz + node[x].rsz][node[x].lsz] % MOD;
} void solve() {
init();
int n, num;
scanf("%d", &n);
while (n--) {
scanf("%d", &num);
insert(1, num);
}
printf("%d\n", dfs(1));
} } gao; int t; void getC() {
for (int i = 0; i < N; i++) {
C[i][0] = C[i][i] = 1;
for (int j = 1; j < i; j++)
C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
}
} int main() {
getC();
scanf("%d", &t);
while (t--) {
gao.solve();
}
return 0;
}

最新文章

  1. 9.6 MongoDB一
  2. Rotate Array
  3. JQuery函数库
  4. Mysql安全配置【转】
  5. computer使用快捷小技巧
  6. POJ2187Beauty Contest
  7. HTTP请求、响应报文格式
  8. 【号外号外:微软收购 .NET 的开源实现 Xamarin 项目的公司】
  9. 10th day
  10. CreateFont具体解释
  11. Ubuntu搭建mysql,Navicat Premium连接
  12. 【LOJ#3097】[SNOI2019]通信(费用流)
  13. Linux内存管理 (6)vmalloc
  14. ArcGis Go to XY功能代码C#
  15. 图片的滑动缩放html、css、js代码
  16. java se的那些细节
  17. Stanford机器学习笔记-9. 聚类(K-means算法)
  18. &lt;OFFER03&gt;03_01_DuplicationInArray
  19. Protocol Buffer Basics: Python
  20. js插件开发的一些感想和心得

热门文章

  1. 【CSWS2014 Summer School】深度问答技术及其在搜索中的应用-马艳军
  2. json的工具以及浏览器排序问题
  3. ubuntu 软件包管理工具 dpkg,apt-get,aptitude 区别
  4. mac 终端 使用 gnu coreutils 工具 ls 颜色显示
  5. libevent个人理解
  6. Jmeter:Java request
  7. iOS利用SDWebImage实现缓存的计算与清理
  8. 原创:【微信小程序】客服消息教程(后台以PHP示例)
  9. [转]一千行MySQL学习笔记
  10. Linux命令-实时监测命令:watch