// luogu-judger-enable-o2
/*
考虑将bfs序按层分段, 每分一段就会使深度+1,所以分的段数+1就是深度
由于每种分段方式至多只能对应一种dfs序, 所以我们的目标就是求出可行的bfs序
然后我们发现, 如果在bfs序中第i个比第i + 1个后出现在dfs序中, 那么这里一定分段然后我们考虑dfs序对于bfs序的限制, 假设a[i] < a[i + 1]的话,意味着a[i + 1]和a[i]同层或者在下一层那么\sum_{i = a[i]} ^ {a[i + 1] - 1} 分层<= 1这样的话得到了一些限制以及确定位置, 没有限制的位置因为任意分都可以, 那么统计0.5答案即可*/
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#define mmp make_pair
#define ll long long
#define M 200010
using namespace std;
int read() {int nm = 0, f = 1;char c = getchar();for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';return nm * f;
}
double note[M], s[M];
int  t[M], a[M], pos[M], f[M], sta[M], n, tp;
int main() {double ans = 1;n = read();for(int i = 1; i <= n; i++) t[read()] = i;for(int i = 1; i <= n; i++) {int x = read();a[t[x]] = i, pos[i] = t[x];}note[1] = 1;for(int i = 1; i < n; i++) {if(pos[i] > pos[i + 1]) note[i] = 1;if(note[i] == 1) {f[i]++;f[i + 1]--;}s[i] = s[i - 1] + note[i];}for(int i = 1; i < n; i++) {if(a[i] < a[i + 1]) {if(s[a[i + 1] - 1] - s[a[i] - 1] > 0) {f[a[i]]++;f[a[i + 1]]--;} else sta[++tp] = a[i];}}for(int i = 1; i <= n; i++) f[i] += f[i - 1];for(int i = 1; i <= tp; i++) {if(f[sta[i]] == 0) note[sta[i]] = 0.5;}for(int i = 1; i <= n; i++) ans += note[i];printf("%.3lf\n", ans);return 0;
}

转载于:https://www.cnblogs.com/luoyibujue/p/10903784.html

[NOI2013]树的计数相关推荐

  1. BZOJ 3244: [Noi2013]树的计数

    传送门 神仙题... 和树的深度有关,由于 $BFS$ 序的性质,显然可以通过把 $BFS$ 序分成若干段来求出深度,每一段就对应某一深度从左到右的所有节点,那么如果确定了分的段数就确定了树的深度(分 ...

  2. P1232 [NOI2013] 树的计数

    -调半天别的东西写错了,心力交瘁. 思路还是不会.. 具体就是二分,没想到,然后再贪心. 一直没整明白一个数它要往别的树走的条件是什么,日后研究. #include <iostream> ...

  3. BZOJ3244 [Noi2013]树的计数 【数学期望 + 树遍历】

    题目链接 BZOJ3244 题解 不会做orz 我们要挖掘出\(bfs\)序和\(dfs\)序的性质 ①容易知道\(bfs\)序一定是一层一层的,如果我们能确定在\(bfs\)序中各层的断点,就能确定 ...

  4. bzoj 1211 [HNOI2004]树的计数

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

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

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

  6. 【BZOJ1211】【HNOI2004】树的计数(prufer序,组合数)

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

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

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

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

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

  9. 【NOI2013】树的计数【树的遍历】【期望】

    传送门 题意:给定一棵nnn个点的树的DFS和BFS序,求树高期望. n≤2e5n \leq 2e5n≤2e5 首先根据BFS序将树点分层,一定切记先自己把树点分层,这样实际上是在排除一部分情况. 将 ...

最新文章

  1. 程序员花名大 PK | 每日趣闻
  2. ES6常用新特性---笔记一
  3. redhat bash: yum: 未找到命令..._常用linux yum 命令和 vim命令,这几个要熟记
  4. NumPy Cookbook 带注释源码 二、NumPy 高级索引和数组概念
  5. 严重漏洞可导致 Juniper 设备遭劫持或破坏
  6. iBATIS In Action(六)执行非查询语句
  7. Java线程状态与方法关系
  8. 单节磷酸铁锂电池充电管理芯片IC,ASC4055B,SOT23-5
  9. 解构网约车界“拼多多”:花小猪背后的商业逻辑和价值空间
  10. Java处理图片报错:two SOF markers
  11. Java程序员月薪三万的技术达到什么程度?
  12. 移远EC200T模块应用移植
  13. 关于强化神兽(圣兽)DBC参数详解
  14. vue自定义音频播放组件_易于创建Vue的自定义音频播放器组件
  15. vFloppy1.5-虚拟启动软盘
  16. 批量作业调度工具 Taskctl 定时器及模块之间的区别
  17. OOAD实验六教务管理系统设计之状态机图
  18. 微信小程序云开发 操作数据库-数据的批量删除
  19. 聚爆登进去显示服务器,《聚爆Implosion》首次大型更新 新模式“驾驶员系统”登场...
  20. 2r 2s matlab模块,matlab中simulink怎样输入s^2+2s+1,用哪个模块?

热门文章

  1. ## __VA_ARGS__ ... 宏和可变参数
  2. matlab r2014a错误,MATLAB中的潜在错误使R2014a回归
  3. python制作聊天机器人原理_用 Python 来做一个聊天机器人吧!(一)
  4. LeetCode 2089. 找出数组排序后的目标下标
  5. LeetCode DD-2020006. 简单游戏(前缀和)
  6. LeetCode 132. 分割回文串 II(DP)
  7. EM(期望极大化)算法及其推广
  8. POJ 1363 火车厢排队问题(栈)
  9. python的运行环境_python-运行环境配置-1
  10. java listutils_Java的list自定义工具类ListUtils