hdu1217

来源:互联网 发布:mac的环境变量配置 编辑:程序博客网 时间:2024/06/14 04:04
/*
分析:
    最短路径,不过这里是乘法、求最大。
注意,因为是乘法,乘数可以大于1、也可以小于1,就等效于边的权值都
是整数的最短路里面,每条边的权值可以有正数、也可以有负数一样。
    所以果断不用Dij。第一次写Floyd,一次过哦~


                                                           2012-06-05
*/








#include"stdio.h"#include"string.h"struct A{char name[33];}E[33];int main(){double map[31][31];double ans[31][31];double t;char temp[33];int k;int k1,k2;int i,l;int n,m;int Case=1;while(scanf("%d",&n),n){for(i=1;i<=n;i++)scanf("%s",E[i].name);///mapscanf("%d",&m);for(i=1;i<=n;i++)for(l=1;l<=n;l++){if(i==l)map[i][l]=1;elsemap[i][l]=0;}for(i=1;i<=m;i++){scanf("%s",temp);for(k1=1;k1<=n;k1++)if(strcmp(E[k1].name,temp)==0)break;scanf("%lf",&t);scanf("%s",temp);for(k2=1;k2<=n;k2++)if(strcmp(E[k2].name,temp)==0)break;map[k1][k2]=t;}///ans的初始化for(i=1;i<=n;i++)for(l=1;l<=n;l++)ans[i][l]=map[i][l];///主体for(k=1;k<=n;k++){for(i=1;i<=n;i++)for(l=1;l<=n;l++){if(ans[i][l]<ans[i][k]*ans[k][l])ans[i][l]=ans[i][k]*ans[k][l];}}if(ans[1][1]>1)printf("Case %d: Yes\n",Case);elseprintf("Case %d: No\n",Case);Case++;}return 0;}