洛谷4316——绿豆蛙的归宿(期望)

传送门

不用说了吧

dp[i]dp[i]表示从ii走到nn的期望步数

那么显然dp[n]=0dp[n]=0

那么直接深搜,然后除以一个出度就可以了

#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;
}
posted @ 2018-10-18 20:37  Stargazer_cykoi  阅读(100)  评论(0编辑  收藏  举报