logo AlgoBeat OnlineJudge
登录 注册

#101865. [BZOJ 1865] Pku2057 The Lost House

内存限制:64 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: 匿名

题目描述

蜗牛的房子遗失在了一棵树的某个叶子结点上,它要从根结点出发开始寻找它的房子。有一些中间结点可能会住着一些虫子,这些虫子会告诉蜗牛它的房子是否在以这个中间结点为根的子树上,这样蜗牛就不用白跑路了。当然,如果有些结点没有住着虫子的话,那么可怜的蜗牛只有靠自己决定访问顺序来探索了。假设蜗牛走过一条边的耗费都是 ,且房子遗失在每个叶子结点的概率都是相等的,那么请问蜗牛找到他的房子的最小数学期望值?

例如在下面的这棵树当中:

蜗牛从根结点 出发开始寻找它的房子,它的房子可能遗失在 。在结点 上住着一只虫子,它会告诉蜗牛,以 为根的子树上是否有蜗牛的房子。蜗牛有两种走法。蜗牛可以先访问 ,如果它在那儿不能找到房子,那么它要回到根结点 ,再通过 来访问结点 (或 ),如果还是不能找到它的房子,那么它又要回到结点 ,再去访问结点 (或 )。在这种走法中,当房子分别位于 的时候,蜗牛需要走的步数分别是 ,期望值是 。显然,这种走法没有充分发挥虫子在这里起到的作用。在另一种走法中,蜗牛先访问结点 ,它可以从住在 上的虫子那里得知它的房子是否存在于 的信息。在这种走法中,当房子分别位于 的时候,蜗牛需要走的步数分别是 ,期望值是 。这种走法合理的利用了虫子提供的信息,得到了更优的数学期望值。

输入格式

输入包含多组测试数据。

每个数据以一行开始,其中包含一个整数 ,表示树中点的数量。然后按照 行描述 个点。为了方便起见,我们将所有的点从 编号。用 编号的点总是树的根节点。这 行中的第 行用数字 描述点。每行由一个整数和一个大写字符YN组成,用一个空格分隔,表示父亲的编号以及是否存在虫子(Y表示存在,而 N表示不存在)。一个点的父亲是指该点与编号为 的点之间最短路径上的与该点相邻的点。在上图中,点 的父亲是点 ,而点 的父亲是点 。对于父亲 ,此整数为 ,表示它没有父亲。示例输入中的第一组描述了上图。

的测试数据表示输入结束,不应进行处理。

输出格式

每组测试数据输出一行。

该行包含一个浮点数,小数点后保留四位数字,这是数学期望值。

样例

样例

样例输入 #1

5
-1 N
1 N
1 Y
3 N
3 N
10
-1 N
1 Y
1 N
2 N
2 N
2 N
3 N
3 Y
8 N
8 N
6
-1 N
1 N
1 Y
1 N
3 N
3 N
0

样例输出 #1

3.0000
5.0000
3.5000

数据范围与提示

对于所有数据,。( 是每个节点的分叉数。)

ACM BeiJing2004