http://poj.org/problem?id=2240
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define MAXN 100 5 const int INF=1<<28; 6 using namespace std; 7 double dis[MAXN][MAXN]; 8 char s[MAXN][MAXN]; 9 char s1[MAXN],s2[MAXN]; 10 int n,t; 11 double r; 12 int main() 13 { 14 int tt=0; 15 while(scanf("%d",&n)&&n){ 16 memset(dis,INF,sizeof(dis)); 17 tt++; 18 for(int i=0;i<n;i++) 19 { 20 scanf("%s",s[i]); 21 dis[i][i]=1; 22 } 23 scanf("%d",&t); 24 for(int j=0;j<t;j++) 25 { 26 scanf("%s %lf %s",s1,&r,s2); 27 int a,b; 28 for(int i=0;i<n;i++) 29 { 30 if(!strcmp(s[i],s1)) 31 { 32 a=i; 33 break; 34 } 35 } 36 for(int j=0;j<n;j++) 37 { 38 if(!strcmp(s[j],s2)) 39 { 40 b=j; 41 break; 42 } 43 } 44 dis[a][b]=r; 45 } 46 for(int k=0;k<n;k++) 47 { 48 for(int i=0;i<n;i++) 49 { 50 for(int j=0;j<n;j++) 51 { 52 if(dis[i][j]<dis[i][k]*dis[k][j]) 53 { 54 dis[i][j]=dis[i][k]*dis[k][j]; 55 } 56 } 57 } 58 } 59 int flag=0; 60 for(int i=0;i<n;i++) 61 { 62 if(dis[i][i]>1.0) 63 { 64 flag=1; 65 break; 66 } 67 } 68 if(flag) printf("Case %d: Yes ",tt); 69 else printf("Case %d: No ",tt); 70 71 } 72 return 0; 73 }