poj 2240 Arbitrage

来源:互联网 发布:海淘比价软件 编辑:程序博客网 时间:2024/05/23 21:58

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 1010char 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;}
0 0
原创粉丝点击