BZOJ3244 [Noi2013]树的计数 【数学期望 + 树遍历】
题目链接
题解
不会做orz
我们要挖掘出\(bfs\)序和\(dfs\)序的性质
①容易知道\(bfs\)序一定是一层一层的,如果我们能确定在\(bfs\)序中各层的断点,就能确定深度
②由于\(bfs\)序和\(dfs\)序儿子遍历顺序是一样的,所以\(bfs\)序同一层的点,在\(dfs\)序中顺序也一样,如果存在\(u,v\)在\(bfs\)中相邻,而在\(dfs\)序中逆序,那么\(u,v\)之间一定有断点
③\(dfs\)序中相邻的两个点\(u,v\)之间\(v\)要么为\(u\)的儿子,要么为\(u\)某个祖先的儿子,若\(v\)的\(bfs\)序大于\(u\)的,那么它们之间之多存在一个断点
④在③中确定的限制区间内,如果包含②中确定的断点,那么就可以确定其余点一定不分层。否则区间内点的顺序一定与\(dfs\)序一样,由于区间端点\(dfs\)序中相邻,所以这个区间只可能限制了一个断点
综上:
①若\(bfs\)序中相邻的在\(dfs\)序中逆序,必有断点
②\(dfs\)序中相邻的在\(bfs\)序中正序,之间最多一个断点,要么已确定期望\(1\)个,要么就只有一个不确定,期望\(0.5\)个
③\(1\)只有必有断点
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 200005,maxm = 100005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
int dfs[maxn],bfs[maxn],pos[maxn],id[maxn],x[maxn],sum[maxn],D[maxn],n;
int main(){
n = read();
REP(i,n) dfs[i] = read();
REP(i,n) bfs[i] = read(),id[bfs[i]] = i;
REP(i,n) dfs[i] = id[dfs[i]],pos[dfs[i]] = i;
x[1] = 1;
for (int i = 2; i < n; i++)
if (pos[i] > pos[i + 1]) x[i] = 1;
for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + x[i];
for (int i = 1; i < n; i++)
if (dfs[i] < dfs[i + 1]){
if (sum[dfs[i + 1] - 1] - sum[dfs[i] - 1]){
D[dfs[i]]++;
D[dfs[i + 1]]--;
}
}
int tot = 0;
for (int i = 1; i < n; i++){
tot += D[i];
if (!x[i] && tot) x[i] = 2;
}
double ans = 1.0;
for (int i = 1; i < n; i++){
if (x[i] == 1) ans += 1.0;
else if (!x[i]) ans += 0.5;
}
printf("%.3lf\n%.3lf\n%.3lf\n",ans - 0.001,ans,ans + 0.001);
return 0;
}
BZOJ3244 [Noi2013]树的计数 【数学期望 + 树遍历】的更多相关文章
- 2018牛客网暑期ACM多校训练营(第五场) F - take - [数学期望][树状数组]
题目链接:https://www.nowcoder.com/acm/contest/143/F 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
- loj#2665. 「NOI2013」树的计数
目录 题目链接 题解 代码 题目链接 loj#2665. 「NOI2013」树的计数 题解 求树高的期望 对bfs序分层 考虑同时符合dfs和bfs序的树满足什么条件 第一个点要强制分层 对于bfs序 ...
- P2290 [HNOI2004]树的计数(bzoj1211)
洛谷P2290 [HNOI2004]树的计数 bzoj1211 [HNOI2004]树的计数 Description 一个有\(n\)个结点的树,设它的结点分别为\(v_1,v_2,\cdots, v ...
- 【BZOJ3244】【NOI2013】树的计数(神仙题)
[BZOJ3244][NOI2013]树的计数(神仙题) 题面 BZOJ 这题有点假,\(bzoj\)上如果要交的话请输出\(ans-0.001,ans,ans+0.001\) 题解 数的形态和编号没 ...
- [UOJ#122][NOI2013]树的计数
[UOJ#122][NOI2013]树的计数 试题描述 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的 DFS 序以及 BFS 序.两棵不同的树的 DFS 序 ...
- 「NOI2013」树的计数 解题报告
「NOI2013」树的计数 这什么神题 考虑对bfs重新编号为1,2,3...n,然后重新搞一下dfs序 设dfs序为\(dfn_i\),dfs序第\(i\)位对应的节点为\(pos_i\) 一个暴力 ...
- UOJ#122【NOI2013】树的计数
[NOI2013]树的计数 链接:http://uoj.ac/problem/122 按BFS序来,如果$B_i$与$B_{i-1}$必须在同一层,那么贡献为0,必须在不同层那么贡献为1,都可以贡献为 ...
- 【NOI2013模拟】坑带的树(仙人球的同构+圆方树乱搞+计数+HASH)
[NOI2013模拟]坑带的树 题意: 求\(n\)个点,\(m\)条边的同构仙人球个数. \(n\le 1000\) 这是一道怎么看怎么不可做的题. 这种题,肯定是圆方树啦~ 好,那么首先转为广义圆 ...
- 【uoj122】 NOI2013—树的计数
http://uoj.ac/problem/122 (题目链接) 题意 给出一棵树的dfs序和bfs序,保证一定可以构成一棵树.问构成的树的期望深度. Solution 这是一个悲伤的故事,我YY的东 ...
随机推荐
- poj_1284_Primitive root
We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the se ...
- jsp <form>表单提交中如何在value属性中写表达式
<input type="text" name="grop_id" value="<%=rs.getString(2)%>" ...
- 实现BX的内容加上123 并把和送到寄存器AX
① 一条指令 ] ②两条指令 MOV AX,BX Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据 传送指令-------传送数据 LEA指令是 有效地址 传送指令 ...
- (转)IDE 而言,是 Xcode 的技术比较先进还是 Visual Studio?
李如一他们弄得那个IT公论,最近有一期是吐槽ObjC的.吐到最后, @涛 吴 说,理想的用户界面语言应该是界面的描述和逻辑分开的,想了半天举不出例子来,其实说的不就是WPF吗?还在用Interface ...
- mysql 按值排序
order by FIELD(AuditorStatus,3,0,1,2) laravel 写法 $data = $query->orderByRaw(\DB::Raw('FIELD(Audit ...
- yii2 的登录注册 轮子
//利用到了yii2 框架之中的验证规则 进行判定而已 也不是很高深的东西 但是 使用框架自身的轮子 会有安全性能的隐患 1注册reg controller 中 我都以admin 为例子 publi ...
- R-biomaRt使用-代码备份
目标:使用R脚本从ensembl上下载transcript数据 简单粗暴,直接上代码.biomaRt的介绍晚一点更新. # this file helps extract information fr ...
- 使用Autofac实现依赖注入注入
依赖注入是什么意思? 依赖倒置 在软件设计原则中,有一种重要的思想叫做依赖倒置.它的核心思想是:不能让高层组件依赖底层组件,而且,不管高层组件和底层组件,两者都应依赖于抽象.那么,这个原则和我们上面的 ...
- ScrollView中ViewPager无法正常滑动问题
本文主要介绍如何解决ViewPager在ScrollView中滑动经常失效.无法正常滑动问题. 解决方法只需要在接近水平滚动时ScrollView不处理事件而交由其子View(即这里的ViewPage ...
- 《Cracking the Coding Interview》——第18章:难题——题目1
2014-04-29 00:56 题目:不用算数运算,完成加法. 解法:那就位运算吧,用加法器的做法就可以了. 代码: // 18.1 add two numbers wihout using ari ...