zoukankan      html  css  js  c++  java
  • POJ2240 Arbitrage bellman

    跟POJ-1860基本一样,bellman求是否存在环。这里吸取了别人的代码,让bellman算法的外循环直接增加一次,再判定是否在这个过程中有无更新推出的情况。

    代码如下:

    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <map>
    #include <string>
    using namespace std;
    
    int N, pos, cnt;
    double dis[35];
    map<string,int>mp;
    
    struct Node
    {
        int x, y;
        double rate;
    }e[905];
    
    bool bellman()
    {
        int flag;
        fill(dis, dis+35, 1000);
        for (int i = 1; i <= N; ++i) {
            flag = 0;
            for (int j = 1; j <= pos; ++j) {
                if (dis[ e[j].x ] * e[j].rate - dis[ e[j].y ] > 1e-6) {
                    dis[ e[j].y ] = dis[ e[j].x ] * e[j].rate;
                    flag = 1;
                }
            }
            if (!flag) {
                break;
            }
        }
        if (flag) {
            return true;
        }
        else {
            return false;
        }
    }
    
    int main()
    {
        int M, ca = 0;
        char a[105], b[105];
        double rate;
        while (scanf("%d", &N), N) {
            mp.clear();
            pos = cnt = 0;
            for (int i = 1; i <= N; ++i) {
                scanf("%s", a);
                mp[a] = ++cnt;
            }
            scanf("%d", &M);
            for (int i = 1; i <= M; ++i) {
                scanf("%s %lf %s", a, &rate, b);
                ++pos;
                e[pos].x = mp[a], e[pos].y = mp[b];
                e[pos].rate = rate;
            }
            printf("Case %d: ", ++ca);
            printf(bellman() ? "Yes\n" : "No\n");
        }
        return 0;
    }
  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/Lyush/p/2571993.html
Copyright © 2011-2022 走看看