绿豆蛙的归宿
绿豆蛙的归宿 给定点数为n的dag以及边权,询问起点到终点经过的边权的期望值, \(N<=100000\) 。 法一: 期望题,考虑倒推,设 \(f[x]\) 表示从点x到终点的路径期望长度,设y是一个与x相连的出点,设 \(out[x]\) 为x的出点的个数,设 \(s[x][y]\) 与x,y相连的边权,不难得知 \[f[x]=\frac{f[y]+dis[x][y]}{out[x]}\] 注意到只有当x算完后,才能继续向后算,于是考虑建反边,用拓扑排序的方法转移方程。 另外注意到深度优先搜索的特点,一定是该点的出点遍历完再转移该点,所以此处也可以用dfs实现。 参考代码: 拓扑排序 #include <iostream> #include <cstdio> #define il inline #define ri register #define lb long double using namespace std; struct point{ point*next;int to,len; }*head[100001],*pt; lb dp[100001]; int team[100001],in[100001],dag[100001]; il void link(int,int,int),read(int&), bfs(int); int main(){ int n,m,i