zoukankan      html  css  js  c++  java
  • zoj1665 dij变形

    既然输入的是损坏率,那1-x就是剩余的。最后只要剩余的最大。

    #include<stdio.h>
    #include<string.h>
    #define Max 99999999
    const int maxn=1003;
    double dis[maxn],map[maxn][maxn];
    int vis[maxn],n,val[maxn];
    void init()
    {
        int i,j;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                if(i==j)
                    map[i][j]=0;
                else map[i][j]=0;
    }
    void dij()
    {
        int i,j,pos;
        pos=n;
        memset(vis,0,sizeof(vis));
        for(i=1;i<=n;i++)
            dis[i]=0;
        dis[pos]=1;
    //    vis[pos]=1;
        for(i=1;i<=n;i++)
        {
            double min=-Max;
            for(j=1;j<=n;j++)
            {
                if(!vis[j]&&min<dis[j])
                {
                    pos=j;
                    min=dis[j];
                }
            }
            vis[pos]=1;
            for(j=1;j<=n;j++)
            {
                if(!vis[j]&&dis[j]<map[pos][j]*dis[pos])
                    dis[j]=map[pos][j]*dis[pos];
            }
        }
    }
    int main()
    {
        int i,j,m;
        double cost;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            init();
            for(i=1;i<n;i++)
                scanf("%d",&val[i]);
            for(i=1;i<=m;i++)
            {
                int x,y;
                scanf("%d%d%lf",&x,&y,&cost);
                if(map[x][y]<1-cost)
                    map[x][y]=map[y][x]=1-cost;
            }
            /*for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    printf("%.2lf ",map[i][j]);
                }
                printf("
    ");
            }*/
            double ans=0;
            dij();
            /*for(i=1;i<=n;i++)
                printf("%d ",dis[i]);
            printf("
    ");*/
            for(i=1;i<n;i++)
                ans+=val[i]*dis[i];
            printf("%.2lf
    ",ans);
        }
    }
  • 相关阅读:
    c++ 启发式搜索解决八数码问题
    基于linux或windows的c/s的循环服务器求一元二次方程的根
    基于linux或windows平台上的c/s简单通信
    第七章总结
    第六章总结
    第五章总结
    第四章总结
    第一章总结
    第三章总结
    第二章总结
  • 原文地址:https://www.cnblogs.com/sweat123/p/4682146.html
Copyright © 2011-2022 走看看