【CF696B】Puzzles(树形DP,期望)】的更多相关文章

Problem Puzzles 题目大意 给一棵树,dfs时随机等概率选择走子树,求期望时间戳. Solution 一个非常简单的树形dp?期望dp.推导出来转移式就非常简单了. 在经过分析以后,我们发现期望时间戳其实只需要考虑自己父亲下来(步数加一)&从兄弟回来两种可能. 设size[i]为i节点子树大小(包括自身) 对于兄弟的情况,i节点的一个兄弟有1/2的可能已经被遍历完毕了,也就是步数加size该兄弟. 于是设ans[i]为到达i点的期望值,则 ans[i]=ans[Father i]+…
[题目链接] http://codeforces.com/problemset/problem/123/E [题目大意] 给出一棵,给出从每个点出发的概率和以每个点为终点的概率,求出每次按照dfs序从起点到达终点的期望. [题解] 首先对于期望计算有X(x,y)=X(x)*X(y),所以对于每次dfs寻路只要求出其起点到终点的期望步数,乘上起点的概率和终点的概率即可.对于一个固定起点和终点的dfs寻路,我们可以发现如果一个点在必要路径上,那么这条路被走过的期望一定为1,如果不在必要路线上,那么走…
给一颗树,求从根出发路径长度的期望是多少. 树形DP 要想清楚期望的计算 /** @Date : 2017-08-12 23:09:41 * @FileName: C.cpp * @Platform: Windows * @Author : Lweleth (SoungEarlf@gmail.com) * @Link : https://github.com/ * @Version : $Id$ */ #include <bits/stdc++.h> #define LL long long…
[题目链接] http://codeforces.com/contest/804/problem/D [题目大意] 给你一个森林,每次询问给出u,v, 从u所在连通块中随机选出一个点与v所在连通块中随机选出一个点相连, 问你此时相连出的树的直径期望是多少?(如果本身就在同一个连通块内,则输出-1) [题解] 我们利用树形dp记录每个点属于的连通块, 以及每个点到不同分支最远点的距离,记为mxd[i] 一遍搜索计算出向下最远,再次搜索的时候得到向上最远即可. 得到各个分支的最远距离之后,我们将其进…
题目链接: B. Puzzles time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Barney lives in country USC (United States of Charzeh). USC has n cities numbered from 1 through n and n - 1 roads between t…
题面 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有一颗棋子.两人轮流将这颗棋子移向其当前位置的一个儿子.假如棋子到达叶子,游戏结束,最终获得的权值为所在叶子对应权值. 小A希望最后的权值尽量大,小B希望尽量小.小A是先手. 在玩了很多局游戏后,小B对其中绝大多数局游戏的结果不满意,他觉得是小A对叶子权值做了手脚.于是他一怒之下,决定将叶子的权值随机排列.现在小B想知道,假…
题目写得不清不楚的... 题目大意:给你一棵$n$个节点的树,你会随机选择其中一个点作为根,随后随机每个点深度遍历其孩子的顺序. 下面给你一个点集$S$,问你遍历完$S$中所有点的期望时间,点集S中的点可能会重复. 数据范围:$n≤10^5$ 我们考虑钦定根,然后暴力$dp$. 设$s[u]$表示遍历以$u$为根的子树的耗时. 设$f[u]$表示开始遍历子树$u$,且最后遍历在子树$u$中结束的期望耗时. 不难发现,$s[u]=2\times siz[u]-2$,其中$siz[u]$为以$u$为…
题目链接 BZOJ2878 题解 除了实现起来比较长,思维难度还是挺小的 观察数据范围发现环长不超过\(20\),而我们去掉环上任何一个点就可以形成森林 于是乎我们枚举断掉的点,然后只需求出剩余每个点为根的答案 设\(f[i]\)表示从\(i\)出发等概率走向子树的期望步数 如果\(i\)为根就是我们所需的答案 首先求出\(f[i]\),然后用换根法扫一遍便求出每个点为根的答案 对于我们枚举的环上的点\(u\),答案自然就是 \[\sum\limits_{(u,v) \in E} \frac{f…
题目描述 梦游中的你来到了一棵$N$个节点的树上.你一共做了$Q$个梦,每个梦需要你从点$u$走到点$v$之后才能苏醒,由于你正在梦游,所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去,为了确保第二天能够准时到校,你要求出每个梦期望经过多少条边才能苏醒.为了避免精度误差,你要输出答案模${10}^9+7$的结果. 输入格式 第一行两个整数分别代表$N$和$Q$.接下来$N-1$行,每行两个整数$u,v$代表树中的一条边.接下来$Q$行,每行两个整数代表询问的$u,v$. 输出格式…
题意:n 个节点的树,初始位置为 1 号节点,初始时间为 1.每次随机地走向任何一个没有走过的子树并且令时间 +1求问走到每一个点时的时间的期望值 思路:比较少见的一道自顶向下的树形DP dp[i]表示走到i点的期望时间 对于U,考虑它走到儿子V需要时间1,在此之前可能要由1走到U,还要走过若干U的其它子树 对于每一棵子树它对答案的贡献就是size,因为要走完所有的点才能出来 任意子树在V前走的概率是0.5,所以计算它对dp[v]的贡献 dp[v]=dp[u]+1+0.5*(size[u]-si…