poj 2240 Arbitrage

floyd的模板题,
问你跑完环后能不能变大。。

1.poj的cin真的有毒。。 900多ms,然而scanf就只要16ms。。
2.floyd要是不初始化真要死。。

我把先把每条路都设为1(自己和自己换当然是1,和别人换,即使换了也不会改变大小),把每个点都设为,然后按照题目修改路。

最后floyd跑一遍就好了。。

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1010
char name[maxn][maxn];
double way[maxn][maxn];
char test[maxn];
int main()
{
    int cnt=0;
    int n;
    while(cin>>n&&n)
    {
        for(int i=1;i<=n;i++)
        {
            cin>>name[i];
        }
        int m;
        cin>>m;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                way[i][j]=1;
            }
        }
        double num;
        for(int i=1;i<=m;i++)
        {
            cin>>test;
            int j;
            for(j=1;j<=n;j++)
            {
                if(!strcmp(name[j],test))
                {
                    break;
                }
            }
            cin>>num;
            cin>>test;
            int k;
            for(k=1;k<=n;k++)
            {
                if(!strcmp(name[k],test))
                {
                    break;
                }
            }
            way[j][k]=num;
        }
        for(int k=1;k<=n;k++)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    way[i][j]=max(way[i][j],way[i][k]*way[k][j]);
                }
            }
        }
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            if(way[i][i]>1)
            {
                flag=1;
                break;
            }
        }
        if(flag)
        {
            cout<<"Case "<<++cnt<<":"<<" Yes"<<endl;
        }
        else
            cout<<"Case "<<++cnt<<":"<<" No"<<endl;
    }
    return 0;
}

你可能感兴趣的:(poj,floyd)