题目大意:
给你一棵树,边权都是1,每一个点有一个是起点的概率和一个是终点的概率,你将以起点为根,开始在树上随机dfs,每到一个点,就会将他的所有儿子随机打乱成序列,然后按照那个随机顺序走完,直到走到终点。求dfs从起点到终点的期望长度。
其实一开始看到这个题,还是有点懵逼的啊
根据期望的线性性,我们可以通过求所有相邻点的期望,然后直接相加,得到ans
那我们可以这么考虑,对于一个点来说,假设我们要求的是从\(x->y\)(\(y\)是\(x\)的儿子)的期望的话,如果走到一个错的儿子,那么就需要\(2*size[son]\)步重新回来(相当于每条边会走两遍),而每个儿子在对应的\(y\)之前的概率又都是\(\frac{1}{2}\)(所有排列中,要不是y在前,就是那一个在前)
所以可以得知,每一个点的贡献 就是\(size[x]\)
那么我们可以通过枚举终点,然后算其他子树的\(size[x]\)以及概率和,求出来他们的贡献
最后直接输出ans就好
#include #include #include #include #include #include #include