hdu 1217 floyd

来源:互联网 发布:便签的元数据 编辑:程序博客网 时间:2024/06/04 18:18
点击打开链接#include <iostream>#include<cstdio>#include<map>#include<algorithm>using namespace std;map<string,int>str;int v,e;const int maxv=50+5;double G[maxv][maxv];void floyd(){        for(int k=1;k<=v;k++)            for(int i=1;i<=v;i++)                 for(int j=1;j<=v;j++)                      G[i][j]=max(G[i][j],G[i][k]*G[k][j]);}int main(){    int kase=0;    while(scanf("%d",&v)==1&&v)    {            str.clear();            for(int i=1;i<=v;i++)            {                char ss[maxv];                scanf("%s",ss);                str[ss]=i;            }            for(int i=1;i<=v;i++)                for(int j=1;j<=v;j++)                     if(i==j) G[i][j]=1;                     else G[i][j]=0;                         //表明没有货币交换关系            scanf("%d",&e);            for(int i=0;i<e;i++)            {                char v1[maxv],v2[maxv];                double cost;                cin>>v1>>cost>>v2;                G[str[v1]][str[v2]]=cost;           //有向图            }          floyd();          bool flag=false;          for(int i=1;i<=v;i++)              if(G[i][i]>1) {                 flag=true;                 break;          }          printf("Case %d: ",++kase);          if(flag) printf("Yes\n");          else printf("No\n");    }    return 0;}