zoukankan      html  css  js  c++  java
  • lightoj 1321 Sending Packets (概率)

    从0到n-1需要传输s个包,传输的时候每条边安全到达的概率为pi,每次传输的时间为2K,如果在传输时候没有安全到达,则要重新传送,求最小的传送时间

    题意:http://www.lightoj.com/volume_showproblem.php?problem=1321

    只要成功传输一次,剩下的就能快速传输,不计时间。那么求最小时间期望就等同于求最大的一次性传输成功的概率p,那么传输成功的最小次数的期望
    就是1/p,那么最小的时间期望就是   1/p * 2 * k * s。
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<vector>
    #include<math.h>
    #include<string>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define N 20006
    #define Lson rood<<1
    #define Rson rood<<1|1
    int k,aa[N<<2],w[N],n;
    double dis[N];
    struct node
    {
        int e,f,v;
        double g;
    }a[N<<2];
    void add(int e,int f,int g)
    {
        a[k].f=f;
        a[k].g=1.0*g/100.0;
        a[k].v=aa[e];
        aa[e]=k++;
    }
    void q(int s)
    {
        memset(w,0,sizeof(w));
        memset(dis,0,sizeof(dis));
        queue<int>Q;
        Q.push(s);
        while(Q.size())
        {
            int e=Q.front();Q.pop();
            w[e]=0;
            for(int i=aa[e];i!=-1;i=a[i].v)
            {
                int f=a[i].f;
                double z=dis[e];
                if(fabs(dis[e])<0.00006)
                    z=1;
                if(dis[f]<z*a[i].g)
                {
                    dis[f]=z*a[i].g;
                    if(!w[f])
                    {
                        w[f]=1;
                        Q.push(f);
                    }
                }
            }
        }
    }
    int main()
    {
        int T,t=1;
        scanf("%d",&T);
        while(T--)
        {
            k=0;
            int m,s,k,e,f,g;
            memset(aa,-1,sizeof(aa));
            scanf("%d %d %d %d",&n,&m,&s,&k);
            while(m--)
            {
                scanf("%d%d%d",&e,&f,&g);
                add(e,f,g);
                add(f,e,g);
            }
            q(0);
            ///printf("%f 
    ",dis[n-1]);
            printf("Case %d: %.9f
    ",t++,1/dis[n-1]*2*k*s);
        }
        return 0;
    }
     
  • 相关阅读:
    CSS强制英文、中文换行与不换行 强制英文换行
    vue 解决IE不能用的问题
    mysql 删除所有表
    sql server 删除所有表
    MySQL通过Navicat实现远程连接的过程
    php升级版本
    linux下与windows下的换行符 [转载]
    linux 的mysql数据库 数据库的路径的软连接
    并查集学习
    Mariadb开机自启动
  • 原文地址:https://www.cnblogs.com/a719525932/p/7807954.html
Copyright © 2011-2022 走看看