洛谷P4316 绿豆蛙的归宿

题意

题解

由于是一个 DAG ,所以直接记忆画搜索。

什么期望dp都是不存在的!

调试记录

  • 不存在的

代码

#include <bits/stdc++.h>
using namespace std;

int n,m, hed[100005], e=1;
struct edge {
    int to, nxt, val;
} edges[400005];
int du[100005];
long double dp[100005];

void addedge(int x, int y, int z) {
    edges[e] = (edge){y, hed[x], z};
    hed[x] = e++;
}
long double dfs(int x) {
    if(dp[x]) return dp[x];
    if(x == n) return 0;
    dp[x] = 0;
    for (int e=hed[x]; e; e = edges[e].nxt) {
        int y = edges[e].to;
        long double ret = dfs(y);
        if (ret != -1) dp[x] += (ret + edges[e].val) / du[x];
    }
    return dp[x];
}

int main() {
    scanf("%d%d", &n, &m);
    dp[n] = 0;
    for (int i=1; i<=m; i++) {
        int x, y, z; scanf("%d%d%d", &x,&y,&z);
        addedge(x, y, z); ++du[x];
    }
    printf("%.2Lf\n", dfs(1));
    return 0;
}

 

posted @ 2018-08-13 19:29  MCH__ds  阅读(209)  评论(1编辑  收藏  举报