标签:des style io os ar for art div sp
2 5 10 100 1 2 2 3 3 4 4 5 1 5 2 4 3 5 2 5 1 4 1 3 10 10 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 4 9
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.6993317967 0.5864284952 0.4440860821 0.2275896991 0.4294074591 0.4851048742 0.4896018842 0.4525044250 0.3406567483 0.6421630037 题意:给你n个点m条边的无向图 思路:dp[j][d]表示不经过i点,d步后到大j点的概率,枚举i#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int maxn = 55; const double eps = 1e-8; int n, m, d; double dp[maxn][10010]; double ans[maxn]; vector<int> map[maxn]; int main() { int t, x, y; scanf("%d", &t); while (t--) { scanf("%d%d%d", &n, &m, &d); for (int i = 1; i <= n; i++) map[i].clear(); for (int i = 1; i <= m; i++) { scanf("%d%d", &x, &y); map[x].push_back(y); map[y].push_back(x); } for (int k = 1; k <= n; k++) { memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; i++) dp[i][0] = 1.0 / n; for (int i = 0; i < d; i++) { for (int j = 1; j <= n; j++) { if (j == k) continue; int size = map[j].size(); for (int l = 0; l < size; l++) { int u = map[j][l]; dp[u][i+1] += dp[j][i] * 1.0 / size; } } } ans[k] = 0.0; for (int i = 1; i <= n; i++) if (i != k) ans[k] += dp[i][d]; printf("%.10f\n", ans[k]); } } return 0; }
标签:des style io os ar for art div sp
原文地址:http://blog.csdn.net/u011345136/article/details/39256089