题意:
解法:
令d[i]表示从点i到点n的期望路径长度
设点x的出度为k,那么d[x]+=(d[v]+w)/k,其中v是x的子节点,w为(x,v)的边权.
dfs自底向上dp即可.
code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PI pair<int,int>
const int maxm=1e5+5;
vector<PI>g[maxm];
int mark[maxm];
double d[maxm];
int n,m;
void dfs(int x){
if(mark[x])return ;
mark[x]=1;
int k=g[x].size();
for(auto i:g[x]){
int v=i.first,w=i.second;
dfs(v);
d[x]+=(d[v]+w)/k;
}
}
signed main(){
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b,c;cin>>a>>b>>c;
g[a].push_back({b,c});
}
dfs(1);
printf("%.2f\n",d[1]);
return 0;
}