zoukankan      html  css  js  c++  java
  • zoj 1655 单源最短路 改为比例+最长路

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?

    problemId=655


    没有理解清题意就硬套模板。所以WA了好几次。


    解析看我的还有一篇http://blog.csdn.net/u011026968/article/details/35579035


    贴代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    #define ll long long
    
    #define INF2 0x03F3F3F3F
    #define INF 1.0
    const int N=100+10;
    int path[N];
    bool vis[N];
    double cost[N][N],lowcost[N],h[N];
    double ans;
    int n,m;
    void Dij()
    {
        int i,j,beg=0;
        double mmin;
        memset(vis,0,sizeof(vis));
        vis[beg]=1;
        for(i=0;i<n;i++)
        {
            lowcost[i]=cost[beg][i];path[i]=beg;
        }
        lowcost[beg]=0;
        path[beg]=-1;
        int pre=beg;
        for(i=1;i<n;i++)
        {
            mmin=-1;
            for(j=0;j<n;j++)
                if(vis[j] == 0 && lowcost[pre]*cost[pre][j]>lowcost[j])
                {
                    lowcost[j]=lowcost[pre]*cost[pre][j];
                    path[j]=pre;
                }
            for(j=0;j<n;j++)
                if(vis[j]==0 && lowcost[j]>mmin)
                {
                    mmin=lowcost[j];
                    pre=j;
                }
            vis[pre]=1;
        }
    }
    
    void Init()
    {
        ans=0.0;
        for(int i=0;i<=n;i++)
            for(int j=0;j<=n;j++)
                cost[i][j]=-1,lowcost[i]=0;
    }
    
    void Addedge()
    {
    
        int u,v;
        double tmp;
        h[0]=0;
        for(int i=1;i<n;i++)
            scanf("%lf",&h[i]);
        for(int i=0;i<m;i++)
        {
            scanf("%d%d%lf",&u,&v,&tmp);
            if(u == n)u=0;
            if(v == n)v=0;
            if(cost[u][v]<1.0-tmp)//////////
            cost[u][v]=cost[v][u]=1.0-tmp;
        }
    }
    /*double dfs(int i,double ret)
    {
        if(path[i])return dfs(path[i],ret)*cost[path[i]][i];
        return ret*cost[0][i];
    }*/
    int main()
    {
        //freopen("zoj1655.txt","r",stdin);
        while(~scanf("%d%d",&n,&m))
        {
            Init();
            Addedge();
            Dij();
            for(int i=1;i<n;i++)
            {
                //ans+=dfs(i,h[i]);
                ans+=h[i]*1.0*lowcost[i];
            }
            printf("%.2lf
    ",ans);
        }
        return 0;
    }
    
    


  • 相关阅读:
    STM32Cube Uart_DMA测试工程
    STM32CubeMX安装指南
    基于STM32Cube的ADC模数采样设计
    C++ this指针的用法
    用七段数码管显示26个字母的方案
    FPGA的引脚VCCINT 、VCCIO VCCA
    Keil环境中建立带FreeRTOS的STM32L项目
    STM32L时钟
    Mysql explain
    nginx屏蔽IP
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7053587.html
Copyright © 2011-2022 走看看