• Bzoj 3036: 绿豆蛙的归宿(期望)


    3036: 绿豆蛙的归宿
    Time Limit: 2 Sec Memory Limit: 128 MB
    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
    Source
    Poetize3

    /*
    期望=概率*贡献.
    然后把贡献停留在点上最后累加.
    */
    #include<cstdio>
    #define MAXN 100001
    using namespace std;
    int n,m,cut,tot,out[MAXN],head[MAXN];
    double s[MAXN],ans[MAXN],finalans;
    struct data{int v,next,x;}e[MAXN*2];
    int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f-1;ch=getchar();}
        while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
        return x*f; 
    }
    void add(int u,int v,int z)
    {
        e[++cut].v=v;
        e[cut].x=z;
        e[cut].next=head[u];
        head[u]=cut;
    }
    void dfs(int u)
    {
        for(int i=head[u];i;i=e[i].next)
        {
            int v=e[i].v;s[v]=s[u]/out[u];
            dfs(v);
            ans[u]+=s[v]*e[i].x;
        }
        return ;
    }
    int main()
    {
        int x,y,z;
        n=read(),m=read();
        while(m--)
        {
            x=read(),y=read(),z=read();
            add(x,y,z),out[x]++;
        }
        s[1]=1;
        dfs(1);
        for(int i=1;i<=n;i++) finalans+=ans[i];
        printf("%.2lf",finalans);
        return 0;
    }
  • 相关阅读:
    linux查看存储盘
    aix中hd5对应什么设备?
    (转)Python 操作 Windows 粘贴板
    eclipse非主窗口的停靠(正常), 恢复, 最小化, 最大化的切换
    (转)HTML5 本地数据库(SQLite) 示例
    [译] 如何像 Python 高手一样编程?
    scrapy递归下载网站
    eclipse快捷键以及使用技巧大全
    python任意编码转utf8或者unicode
    apache快速配置简易网站
  • 原文地址:https://www.cnblogs.com/nancheng58/p/10068088.html
Copyright © 2020-2023  润新知