「NOI2012」迷失游乐园

题目描述

放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩。

进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点、m条道路的无向连通图,且该图中至多有一个环(即m只可能等于n或者n-1)。小Z现在所在的大门也正好是一个景点。小Z不知道什么好玩,于是他决定,从当前位置出发,每次随机去一个和当前景点有道路相连的景点,并且同一个景点不去两次(包括起始景点)。贪玩的小Z会一直游玩,直到当前景点的相邻景点都已经访问过为止。

小Z所有经过的景点按顺序构成一条非重复路径,他想知道这条路径的期望长度是多少?

小Z把游乐园的抽象地图画下来带回了家,可是忘了标哪个点是大门,他只好假设每个景点都可能是大门(即每个景点作为起始点的概率是一样的)。同时,他每次在选择下一个景点时会等概率地随机选择一个还没去过的相邻景点。

【评分方法】本题没有部分分,你程序的输出只有和标准答案的差距不超过0.01时,才能获得该测试点的满分,否则不得分。

输入格式

第一行是两个整数n和m,分别表示景点数和道路数。 接下来行,每行三个整数Xi, Yi, Wi,分别表示第i条路径的两个景点为Xi, Yi,路径长Wi。所有景点的编号从1至n,两个景点之间至多只有一条道路。

输出格式

共一行,包含一个实数,即路径的期望长度,保留五位小数。

输入输出样例

输入 #1 复制

4 3

1 2 3

2 3 1

3 4 4

输出 #1 复制

6.00000000

说明/提示

【样例解释】样例数据中共有6条不同的路径:

路径 长度  概率
1-->4 8 1/4
2-->1 3 1/8
2-->4 5 1/8
3-->1 4 1/8
3-->4 4 1/8
4-->1 8 1/4

因此期望长度 = 8/4 + 3/8 + 5/8 + 4/8 + 4/8 + 8/4 = 6.00

【评分方法】本题没有部分分,你程序的输出只有和标准答案的差距不超过0.01时,才能获得该测试点的满分,否则不得分。

【数据规模和约定】对于100%的数据,1 <= Wi <= 100。

 测试点编号 n m 备注
1 n=10 m = n-1 保证图是链状
2 n=100 只有节点1的度数大于2
3 n=1000 /
4 n=100000 /
5 n=100000 /
6 n=10 m = n / 7 n=100 环中节点个数<=5
8 n=1000 环中节点个数<=10
9 n=100000 环中节点个数<=15
10 n=100000 环中节点个数<=20

lg_emptyset的题解

给定一棵带权树/基环树,随机选一点出发走不重复路径,问期望带权路径长度.

首先考虑普通树的情况.

\(son[i]\)表示子结点数量,\(fa[i]\)表示父结点数量,题中\(fa[i]\)为\(1\)或\(2\).

用\(down[i]\)表示从编号为\(i\)的结点出发,规定第一步向下走的期望路径长度, 则有 \(\displaystyle down[i]=\frac{\sum\left(down[j] + w_{i,j}\right)}{son[i]}\). 其中,\(j\)为\(i\)的子节点,\(\omega_{i,j}\)表示从\(i\)到\(j\)的路径长度. 特别的,叶子结点\(down\)值为\(0\).

相似的,用\(up[i]\)表示从编号为\(i\)的结点出发,规定第一步向上走的期望路径长度(注意:第一步到达父结点\(k\)之后可以随意走,第二步允许到\(k\)的其他子结点),则有 \(up[i]=\omega_{i,k}+\displaystyle\frac{up[k]+down[k]\cdot son[k]-down[i]-w_{i,k}}{son[k]}\).

显然,不论如何,第一步贡献了\(\omega_{i,k}\). 不难看出,第二步向上走的贡献为\(up[k]\),向下走的贡献粗略看是\(down[k]\cdot son[k]\),考虑到不能走回来,所以应减去\(down[i]+w_{i,k}\). 第二步向上走有\(fa[k]\)(普通树为\(1\))种可能,向下走有\(son[k]-1\)种可能(不允许回来),故分母为\(fa[k]+son[k]-1=son[k]\).

特别的,常规树根结点\(up\)值为\(0\). 注意:若\(k\)是根结点并且\(son[k]\ne 1\),分母是\(son[k]-1\). 若\(k\)是根节点并且这个可怜的根结点只有一个儿子,\(up[i]=\omega_{i,k}\).

易得,\(\displaystyle ans_{i}=\frac{down[i]\cdot son[i]+up[i]}{son[i]+1}\). \(i\)为根结点时分母是\(son[i]\).

再来考虑基环树的情况

基环树的基础是环(红色),以环上结点为根向下发展成树(蓝色). 实际上,也存在很孤单的树仅有根节点. 如图中①.

在基环树上,“下”是从树的根节点向叶子结点的方向,“上”是向根节点即环上结点的方向.

注意到,\(down\)值是不变的,对任意结点,由于第一步向下,无论怎样走依然在该树上.

相比下,\(up\)值的计算则显得繁琐. 考虑我们对\(up\)的定义仅规定了第一步向上,实际上,此时树上结点(蓝色)到达树根节点即环上结点(红色)后,允许沿环继续前行,甚至可以在中途钻入另一棵树. 如图中路线⑪ ---> ⑩ ---> ⑤ ---> ② ---> ① ---> ⑥ ---> ⑭

因此,下面我们主要讨论\(up\)值的计算.

对于红色的结点\(i\),先规定必须逆时针走, 则有 \(\displaystyle up[i]=\sum\left[P_j\cdot \left(\frac{down[j]\cdot son[j]}{son[j]+1}+\omega_{j-1,j}\right)\right]\). \(P_j\)表示从所在树的根节点算起,走到环上第\(j\)个点的概率。

钻入另一棵树时,贡献\(down[j]\).易知,在子结点和环上下一个结点中选择,概率为\(\frac{son[j]}{son[j]+1}\).以及不论如何,从环的上一个点走来的的贡献为\(\omega\).

注意:如果环上下一个点是出发点的话,分母为\(son[j]\). 规定逆时针时,以从结点①出发为例,P(走到② )=1,P(走到⑤ )=0.5,P(走到⑥ )=0.125.

然后顺时针求一遍,这是因为无重复路径在环上不允许顺逆时针交混,顺逆时针一定考虑了所有情况. 最终给\(up[i]\)除以2, 这很好理解,因为规定逆时针方向时第一步一定到②,但是实际上从①出发第一步到②的概率和第一步到⑥的概率都是0.5.

对于树上结点(蓝色),直接像普通树那样由根结点(红色的)推就好啦.

最终,\(\displaystyle ans={\frac{1}{n}{ \sum_{i=1}^{n}ans_{i}}}\)

代码不想写了,我还要写仙人掌呢。

「NOI2012」迷失游乐园的更多相关文章

  1. 【BZOJ2878】【NOI2012】迷失游乐园(动态规划)

    [BZOJ2878][NOI2012]迷失游乐园(动态规划) 题面 BZOJ 题解 记得以前考试的时候做过这道题目 这题的暴力还是非常显然的,每次\(dfs\)一下就好了. 时间复杂度\(O(n^2) ...

  2. 「NOI2012」骑行川藏

    「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...

  3. 【BZOJ】【2878】【NOI2012】迷失游乐园

    树形+基环树DP/数学期望 然而我并不会做…… 题解戳这里:http://blog.csdn.net/u011265346/article/details/46328543 好吧先考虑一个简单点的,当 ...

  4. BZOJ 2878 【NOI2012】 迷失游乐园

    题目链接:迷失游乐园 这道题也没有传说中的那么难写吗→_→ 似乎有篇博客讲得特详细……附上链接:戳这里 如果这道题不是基环树,而就是一棵树的话,我们来考虑改怎么做.因为树上的路径只有向上.向下两种走法 ...

  5. 【NOI2012】迷失游乐园

    题目链接:迷失游乐园(BZOJ)  迷失游乐园(Luogu) 独立完成的题,写一发题解纪念一波~ 模拟完样例大概可以知道是道树形DP了. 观察数据范围,发现是基环树,至少会有一个环. 先从树的部分开始 ...

  6. 【LOJ】#2674. 「NOI2012」美食节

    题解 这道题的费用流如果朴素一点怎么建边呢 建出\(\sum_{i = 1}^{n} p^{i} M\)个点,第\(i\)个厨师的第\(j\)个点表示这个厨师倒数第\(j\)个做的是某道菜 这个点向汇 ...

  7. 【LOJ】#2672. 「NOI2012」魔幻棋盘

    题解 代码7.1KB,人傻代码长 恶心死我了这代码真的把我写恶心了= = 想一想就知道这个东西--维护到中心的差分,然后用二维线段树维护一下矩形的gcd 嗯,我说完了,你写吧. 首先这个二维线段树的单 ...

  8. 【LOJ】#2670. 「NOI2012」随机数生成器

    题解 矩阵乘法,注意需要快速乘 矩阵2*2 a c 0 1 代码 #include <iostream> #include <algorithm> #include <c ...

  9. @loj - 2674@ 「NOI2012」美食节

    目录 @description@ @solution@ @accepted code@ @details@ @description@ CZ 市为了欢迎全国各地的同学,特地举办了一场盛大的美食节. 作 ...

随机推荐

  1. [转帖]Linux教程(13)- Linux中的通配符和正则表达式

    Linux教程(13)- Linux中的通配符和正则表达式 2018-08-22 06:16:44 钱婷婷 阅读数 39更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文 ...

  2. Spring Boot取消默认tomcat启动,打成war包发布到服务器运行

    一.设置打包方式 在pom.xml中设置打包格式 <packaging>war</packaging> 二.取消Spring Boot的tomcat <!--部署成war ...

  3. 92. 反转链表 II

    反转从位置 m 到 n 的链表.请使用一趟扫描完成反转.   说明: 1 ≤ m ≤ n ≤ 链表长度.   示例: 输入: 1->2->3->4->5->NULL, m ...

  4. 嵌入式02 STM32 实验04跑马灯

    开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...

  5. python 之 前端开发( jQuery事件、动画效果、.each()、 .data())

    11.58 事件 11.581 事件绑定方法与解绑 绑定事件: // 绑定方式一: $('.box1').click(function () { alert('绑定方式一') }); ​ // 绑定方 ...

  6. 11 IO流(八)——装饰器设计模式,Filter装饰流

    声明:本文部分图片及内容引用自:https://www.cnblogs.com/qiumingcheng/p/5219631.html java装饰器设计模式 举一个形象的例子,人可以说话,而扩音器可 ...

  7. Linux删除含有特殊符号文件名的文件

    1. 文件名含有特殊字符,直接使用 rm 可能删除不了,可以使用如下方法: 1) 使用 ls -i 查处该文件的 inode 号,假设为123    2) 使用find命令删除: rm `find . ...

  8. Select与Epoll的区别

      相同点: 都是IO多路转接,都是一个线程能同一时间等待一堆描述符 不同点: 1.select接口使用不方便,每次调用完select都需要重新设置fd_set,因为输入输出未分离,返回的fd_set ...

  9. 我的Vue朝圣之路2

    1.创建第一个Vue案例 1. 引入Vue.js   2. 创建Vue对象      el : 指定根element(选择器)      data : 初始化数据(页面可以访问)  3. 双向数据绑定 ...

  10. 创建包含CRUD操作的Web API接口3:实现Post方法

    本节是前面两节的延续,前面我们为Web API创建了必要的基础设施,并实现了Get方法.在这里,我们将在Web API中实现POST方法. 在RESTful架构中,使用HTTP POST请求用来在数据 ...