洛谷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; }