不用说了吧
表示从走到的期望步数
那么显然
那么直接深搜,然后除以一个出度就可以了
#include<bits/stdc++.h>
using namespace std;
int adj[100005],nxt[200005],to[200005],cnt,n,m;
double dp[100005],val[200005],in[100005];
bool vis[100005];
inline int read(){
char ch=getchar();
int res=0;
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
return res;
}
inline void addedge(int u,int v,int w){
in[u]++,nxt[++cnt]=adj[u],adj[u]=cnt,to[cnt]=v,val[cnt]=w;
}
inline double dfs(int u){
if(vis[u])return dp[u];
vis[u]=true;
if(u==n)return dp[u]=0.000;
for(int e=adj[u];e;e=nxt[e]){
int v=to[e];
dp[u]+=val[e]+dfs(v);
}
dp[u]/=in[u];
return dp[u];
}
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++){
int u=read(),v=read(),w=read();
addedge(u,v,w);
}
double ans=dfs(1);
printf("%.2lf",ans);
return 0;
}