//目录

Poj(2240),Floyd求汇率是不是赚钱

题目链接:http://poj.org/problem?id=2240

Floyd算法修改一下,我要最大路径(通过转汇率变到最大)改成max.

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>

using namespace std;

double dis[50][50];

int n;

int main()
{
    int cases = 1;
    while(scanf("%d",&n),n)
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(i==j)
                    dis[i][j] = 1;
                else dis[i][j] = 0;

        char s[50][50],a[50],b[50];

        for(int i=1;i<=n;i++)
            scanf("%s",s[i]);
        int m;
        double t;
        scanf("%d",&m);

        for(int i=1;i<=m;i++)
        {
            scanf("%s %lf %s",a,&t,b);
            int j,k;
            for(j=1;j<=n;j++)
                if(strcmp(s[j],a)==0) break;
            for(k=1;k<=n;k++)
                if(strcmp(s[k],b)==0) break;
            dis[j][k] = t;
        }

        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    dis[i][j] = max(dis[i][j],dis[i][k]*dis[k][j]);


        bool flag = false;
        for(int i=1;i<=n;i++)
            if(dis[i][i]>1)
            {
                flag = true;
                break;
            }
        if(flag)
            printf("Case %d: Yes\n",cases++);
        else printf("Case %d: No\n",cases++);


    }
    return 0;
}

 

posted @ 2016-08-02 21:53  小草的大树梦  阅读(182)  评论(0编辑  收藏  举报