zoukankan      html  css  js  c++  java
  • POJ-2240 -Arbitrage(Bellman)

    题目链接:Arbitrage


    让这题坑了,精度损失的厉害。用赋值的话。直接所有变成0.00了,无奈下,我仅仅好往里输了,和POJ1860一样找正环,代码也差点儿相同,略微改改就能够了,可是这个题精度损失的比那个。

    。。。

    水过

    POJ计划的最短路模块,刷完了,最短路问题,挺坑的,可是就是那点东西,变来变去,就是改改dis[]的更新条件。

    明天就要開始POJ的最小生成树了,发火

    ME                  TI

    704Kb            46Ms               

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    const int N = 50;
    const int M = 1010;
    char a[N][N],s[N];
    double dis[N];
    int n,m,num;
    struct node{
        int u,v;
        double w;
    }edge[M];
    int Bellman(int x)
    {
    
        dis[x] = 1.0;//開始时漏了,结果都打NO
        for(int i = 0;i <n;i++)
        {
            for(int j = 0;j < num; j++)
            {
                if(dis[edge[j].v] < dis[edge[j].u] * edge[j].w)
                    dis[edge[j].v] = dis[edge[j].u] * edge[j].w;
            }
        }
        for(int i = 0;i<num;i++)
        {
            if(dis[edge[i].v] < dis[edge[i].u]*edge[i].w)
                return 1;
        }
        return 0;
    
    }
    int main()
    {
        int c;
        c = 0;
        while(scanf("%d",&n),n)
        {
            c++;
            for(int i = 0;i <n;i++)
            dis[i] = 0;
    
            for(int i = 0;i <n;i ++)
                scanf("%s",a[i]);
    
            scanf("%d",&m);
            num = 0;
            while(m--)
            {
                scanf("%s",s);
                for(int i = 0;i <n;i++)
                {
                    if(strcmp(s,a[i])== 0)
                    {
                        edge[num].u = i;
                        break;
                    }
                }
                scanf("%lf",&edge[num].w);
                scanf("%s",s);
                 for(int i = 0;i <n;i++)
                {
                    if(strcmp(s,a[i]) == 0)
                    {
                        edge[num++].v = i;
                        break;
                    }
                }
            }
            int st;
            for(int i = 0;i<n;i++)//挨个枚举,找正环
            {
                st = Bellman(i);
                if(st)
                    break;
            }
            printf("Case %d: ",c);
            if(st)
                puts("Yes");
            else
                puts("No");
        }
        return 0;
    }
    


  • 相关阅读:
    Oracle 添加主键和索引
    Oracle中查询主键、外键、sequence、表基本信息等
    Spring工作原理
    Ehcache 缓存使用
    socket编程-java
    oracle触发器详解
    单例模式的几种写法
    [LeetCode] 412. Fizz Buzz 嘶嘶嗡嗡
    LeetCode Top Interview Questions
    [LeetCode] 131. Palindrome Partitioning 回文分割
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6856797.html
Copyright © 2011-2022 走看看