• 【BZOJ】3036: 绿豆蛙的归宿


    Description

    随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿。

    给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度。绿豆蛙从起点出发,走向终点。
    到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K 。
    现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少?

    Input

    第一行: 两个整数 N M,代表图中有N个点、M条边
    第二行到第 1+M 行: 每行3个整数 a b c,代表从a到b有一条长度为c的有向边

    Output


    从起点到终点路径总长度的期望值,四舍五入保留两位小数。


    Sample Input

    4 4
    1 2 1
    1 3 2
    2 3 3
    3 4 4

    Sample Output

    7.00

    HINT



    对于100%的数据  N<=100000,M<=2*N

    题解:

       概率dp……还是写得少啊。

       dp[i]表示搜索到第i个点的答案。先预处理出来每个点的出度。然后像跑图一样跑一边dfs就行了。一个点的答案为子树的答案+这个点与儿子之间的边权贡献出来的答案。

     

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int MAXN = 100001;
    const int MAXM = 200001;
    struct xx
    {
        int from, to, w, nxt;
    }e[MAXM];
    int n, m, cnt, head[MAXM];
    bool visit[MAXN];
    double dp[MAXN];
    int chu[MAXN];
    inline void add(int x, int y, int z)
    {
        cnt++;
        e[cnt].from = x;
        e[cnt].to = y;
        e[cnt].w = z;
        e[cnt].nxt = head[x];
        head[x] = cnt;
        chu[x]++;
    }
    void dfs(int x)
    {
        int i;
        visit[x] = true;
        for (i = head[x]; i; i = e[i].nxt)
        {
            if (visit[e[i].to] == false) dfs(e[i].to);
            dp[x] += dp[e[i].to] + e[i].w;
        }
        if (chu[x] != 0) dp[x] = dp[x] / (chu[x]*1.0)*1.0;
    }
    int main(int argc, char *argv[])
    {
        int i, j, x, y,z;
        scanf("%d%d", &n, &m);
        for (i = 1; i <= m; i++)
        {
            scanf("%d%d%d", &x, &y, &z);
            add(x, y, z);
        }
        dfs(1);
        printf("%.2f
    ", dp[1]);
        return 0;
    }
    
  • 相关阅读:
    从一个面试题看程序员的几项基本功
    成为顶尖的AI算法工程师,你该具备些什么?
    LeetCode 图解 | 30.串联所有单词的子串
    程序猿在等电梯时都在想什么?
    以后要是再写 for 循环,我就捶自己
    一起刷题学习 Git/SQL/正则表达式
    LeetCode 图解 | 191.位 1 的个数
    如何利用寒假的时间来准备 2020 年的蓝桥杯?
    VC中调用WebBrowser
    关于SSL证书的学习与总结
  • 原文地址:https://www.cnblogs.com/BeyondW/p/5947000.html
Copyright © 2020-2023  润新知