zoukankan      html  css  js  c++  java
  • ZOJ 1655 FZU 1125 Transport Goods

    迪杰斯特拉最短路径。

    1.every city must wait till all the goods arrive, and then transport the arriving goods together with its own goods to the next city.  这个条件貌似可以忽略掉。

    2.One city can only transport the goods to one city.  这个条件貌似也可以忽略掉,是一定的。

    例如:A物品和B物品在不同的城市,他们都往X城市运输,然而X城市到首都的最少损失的路必定只有一条的,所以2条件可以忽略。至于1条件,等和不等好像也没什么区别...... = =!

    综上所述:就是每个物品只管自己运输,算最短路,每条路的权值就是比例,算出每个城市到首都损耗最少的路即可。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn = 105;
    double weight[maxn], ratio[maxn][maxn], e[maxn];
    int s[maxn];
    int main()
    {
        int n, m, i, j, u, v, ii;
        double cc;
        while (~scanf("%d%d", &n, &m))
        {
            memset(s, 0, sizeof(s));
            memset(ratio, 0, sizeof(ratio));
            for (i = 1; i <= n - 1; i++) scanf("%lf", &weight[i]);
            for (i = 1; i <= m; i++)
            {
                scanf("%d%d%lf", &u, &v, &cc);
                cc = 1 - cc;
                if (cc > ratio[u][v])
                {
                    ratio[u][v] = cc;
                    ratio[v][u] = cc;
                }
            }
            for (i = 1; i <= n; i++) e[i] = ratio[n][i];
            e[n] = 1; s[n] = 1;
            for (ii = 1; ii < n; ii++)
            {
                double  maxn = -1;
                int flag = 0, x;
                for (i = 1; i <= n; i++)
                {
                    if (!s[i] && (maxn<0 || maxn<e[i]))
                    {
                        flag = 1;
                        maxn = e[i];
                        x = i;
                    }
                }
                if (!flag) break;
                s[x] = 1;
                for (i = 1; i <= n; i++)
                if (!s[i] && ratio[x][i] != 0 && e[x] * ratio[x][i] > e[i])
                    e[i] = e[x] * ratio[x][i];            
            }
            double anss = 0;
            for (i = 1; i < n; i++) anss = anss + e[i] * weight[i];    
            printf("%.2f
    ", anss);
        }
        return 0;
    }
  • 相关阅读:
    查询session内容
    7个月工作总结
    clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】
    javascript实现jsp页面的打印预览
    Ext:添加进度条
    js实现非模态窗口增加数据后刷新父窗口数据
    websphere:rs.getDate()无法使用的解决方法
    POI实现excel各种验证和导入的思路总结
    Tomcat迁移到WebsphereURL获取中文参数乱码问题
    JS函数参数
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4498089.html
Copyright © 2011-2022 走看看