还是逆推,如果遇到跳板直接继承目标地的期望即可
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
double dp[maxn];
int n,m,nxt[maxn];
int main(){
while(scanf("%d%d",&n,&m)&&n){
memset(nxt,,sizeof nxt);
memset(dp,,sizeof dp); for(int i=;i<=m;i++){
int u,v;
cin>>u>>v;
nxt[u]=v;
} for(int i=n-;i>=;i--)
if(nxt[i]!=){
int tmp=i;
while(nxt[tmp]!=)
tmp=nxt[tmp];
dp[i]=dp[tmp];
}
else {
for(int j=;j<=;j++)
dp[i]+=(double)/ * (dp[i+j]+);
}
printf("%.4lf\n",dp[]);
}
}