f[i]表示i到n的期望步数,刷水有益身心健康
#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 200020
using namespace std;
int n,m,tot=1,head[maxn],q[maxn],out[maxn],vis[maxn];
double f[maxn];
struct edge{int w,v,next;}e[maxn];
void adde(int a,int b,int c){e[tot].v=b,e[tot].next=head[a],e[tot].w=c;head[a]=tot++;}
void dfs(int u){
vis[u]=1;
for(int i=head[u];i;i=e[i].next){
if(!vis[e[i].v])dfs(e[i].v);
f[u]+=f[e[i].v]+e[i].w;
}
if(out[u])f[u]/=1.0*out[u];
}
int main(){
scanf("%d%d",&n,&m);
for(int a,b,c,i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
adde(a,b,c);out[a]++;
}
dfs(1);
printf("%.2lf",f[1]);
return 0;
}