Description

我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序。两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同,例如下面两棵树的DFS序都是1 2 4 5 3,BFS序都是1 2 3 4 5

现给定一个DFS序和BFS序,我们想要知道,符合条件的有根树中,树的高度的平均值。即,假如共有K棵不同的有根树具有这组DFS序和BFS序,且他们的高度分别是h1,h2,...,hk,那么请你输出
(h1+h2..+hk)/k
Input

有3行。
第一行包含1个正整数n,表示树的节点个数。
第二行包含n个正整数,是一个1~n的排列,表示树的DFS序。
第三行包含n个正整数,是一个1~n的排列,表示树的BFS序。
输入保证至少存在一棵树符合给定的两个序列。
Output

仅包含1个实数,四舍五入保留恰好三位小数,表示树高的平均值。
Sample Input

5
1 2 4 5 3
1 2 3 4 5

Sample Output
3.500
HINT

【评分方式】

如果输出文件的答案与标准输出的差不超过0.001,则将获得该测试点上的分数,否则不得分。

【数据规模和约定】

20%的测试数据,满足:n≤10;

40%的测试数据,满足:n≤100;

85%的测试数据,满足:n≤2000;

100%的测试数据,满足:2≤n≤200000。

【说明】

树的高度:一棵有根树如果只包含一个根节点,那么它的高度为1。否则,它的高度为根节点的所有子树的高度的最大值加1。

对于树中任意的三个节点a , b , c ,如果a, b都是c的儿子,则a, b在BFS序中和DFS序中的相对前后位置是一致的,即要么a都在b的前方,要么a都在b的后方。

Orz两位神犇的题解http://www.cnblogs.com/g-word/p/3288675.html

http://www.cnblogs.com/lazycal/p/bzoj-3244.html

我太弱了,你们还是看他们两个的吧,他们讲的还是比较清楚的

 const
maxn=;
type
node=record
lc,rc,l,r,min:longint;
end;
var
a,b,dfs,bfs,max:array[..maxn]of longint;
f:array[..maxn*]of node;
n,tot:longint;
ans,s:double; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; procedure build(l,r:longint);
var
now,mid:longint;
begin
inc(tot);now:=tot;
f[now].l:=l;f[now].r:=r;
if l=r then
begin
f[now].min:=a[l];
exit;
end;
mid:=(l+r)>>;
f[now].lc:=tot+;
build(l,mid);
f[now].rc:=tot+;
build(mid+,r);
f[now].min:=min(f[f[now].lc].min,f[f[now].rc].min);
end; function min(now,l,r:longint):longint;
var
mid:longint;
begin
if (f[now].l>=l) and (f[now].r<=r) then exit(f[now].min);
mid:=(f[now].l+f[now].r)>>;
min:=n;
if l<=mid then min:=min(min(f[now].lc,l,r),min);
if r>mid then min:=min(min(f[now].rc,l,r),min);
end; procedure main;
var
i:longint;
begin
read(n);
for i:= to n do read(a[i]);
for i:= to n do read(b[i]);
for i:= to n do bfs[b[i]]:=i;
for i:= to n do a[i]:=bfs[a[i]];
for i:= to n do dfs[a[i]]:=i;
for i:= to n do
if a[i]>max[i-] then max[i]:=a[i]
else max[i]:=max[i-];
ans:=;
build(,n);
for i:= to n- do
if (i=) or (dfs[i+]<dfs[i]) then ans:=ans++s
else
if dfs[i+]=dfs[i]+ then
begin
if max[dfs[i]]<=i+ then s:=s+0.5;
end
else
if min(,dfs[i],dfs[i+])<i then s:=;
ans:=ans+s;
writeln(ans-0.001::);writeln(ans::);writeln(ans+0.001::);
end; begin
main;
end.

3244: [Noi2013]树的计数 - BZOJ的更多相关文章

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

    Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同, ...

  2. [UOJ#122][NOI2013]树的计数

    [UOJ#122][NOI2013]树的计数 试题描述 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的 DFS 序以及 BFS 序.两棵不同的树的 DFS 序 ...

  3. BZOJ3244 NOI2013树的计数(概率期望)

    容易发现的一点是如果确定了每一层有哪些点,树的形态就确定了.问题变为划分bfs序. 考虑怎样划分是合法的.同一层的点在bfs序中出现顺序与dfs序中相同.对于dfs序中相邻两点依次设为x和y,y至多在 ...

  4. [BZOJ3244][NOI2013]树的计数

    这题大家为什么都写O(NlogN)的算法呢?…… 让本蒟蒻来写一个O(N)的吧…… 首先还是对BFS序和DFS序重编号,记标好的DFS序为d[1..n].令pos[x]为x在d[]中出现的位置,即po ...

  5. [bzoj3244][noi2013]树的计数 题解

    UPD: 那位神牛的题解更新了,在这里. ------------------------------------------------------------------------------- ...

  6. [bzoj3244] [洛谷P1232] [Noi2013] 树的计数

    Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同, ...

  7. 【BZOJ3244】【UOJ#122】【NOI2013]树的计数

    NOI都是酱的题怎么玩啊,哇.jpg 原题: 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的 ...

  8. 【uoj122】 NOI2013—树的计数

    http://uoj.ac/problem/122 (题目链接) 题意 给出一棵树的dfs序和bfs序,保证一定可以构成一棵树.问构成的树的期望深度. Solution 这是一个悲伤的故事,我YY的东 ...

  9. [HNOI2004]树的计数 BZOJ 1211 prufer序列

    题目描述 输入输出格式 输入格式: 输入文件第一行是一个正整数n,表示树有n个结点.第二行有n个数,第i个数表示di,即树的第i个结点的度数.其中1<=n<=150,输入数据保证满足条件的 ...

随机推荐

  1. Hadoop YARN配置参数剖析—RM与NM相关参数

    注意,配置这些参数前,应充分理解这几个参数的含义,以防止误配给集群带来的隐患.另外,这些参数均需要在yarn-site.xml中配置. 1.    ResourceManager相关配置参数 (1) ...

  2. 《Cocos2d-x实战 Lua卷》上线了

    感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...

  3. UI2_UIGesture

    // // ViewController.h // UI2_UIGesture // // Created by zhangxueming on 15/7/9. // Copyright (c) 20 ...

  4. UI3_ViewController初步

    // // AppDelegate.m // UI3_ViewController初步 // // Created by zhangxueming on 15/6/30. // Copyright ( ...

  5. asp.net 小技巧

    文字用一个label标签包起来,设置一个属性:for,其for的值要和复选框的id相同. <p> 1.通过点击文字,就选中复选框</p> <p>文字用一个label ...

  6. eclipse不能更改设置tomcat 中的ServerLocation问题

    当自己用eclipse写好了web项目后,也同时配置了服务器(tomcat6), 上面部署完毕后,直接访问http://localhost:8080 发现是 无法访问的,这是因为,Servers这里的 ...

  7. (转)MongoDB 实现currentOp定时捕获

    问题描述: 当分析生产环境发生的性能问题时,常常因为没有实时的依据而无从下手.那么笔者通过捕获db.currentOp()到文件,并作为定时任务,可供后续分析. 解决方法: 步骤一:Shell脚本记录 ...

  8. HDU1070 Milk 细节决定成败

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1070 注意:1.喝到第五天,第六天就不喝了  2.相同花费的,优先考虑容量大的  3.注意强制类型转换 ...

  9. H.264的一些资料整理

    本文转载自 http://blog.csdn.net/ljzcom/article/details/7258978, 如有需要,请移步查看. Technorati 标签: H.264 资料整理 --- ...

  10. jquery的change 事件

    jquery的change 事件 . <script src="jquery.min.js" type="text/javascript">< ...