Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5047 Accepted Submission(s): 2314
题目要求就是通过汇率的转换是否能赚钱,Floyd算法 Ps:汇率的转换是单项的,不能往返。最好不用dijkstar算法好像有负数。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<cstdlib> 6 #include<map> 7 using namespace std; 8 #define M 33 9 10 double mymap[M][M]; 11 int flag=1; 12 13 double max(double a,double b) 14 { 15 return a > b? a:b; 16 } 17 18 void Floyd(int n) 19 { 20 int i,j,k; 21 for(k = 1; k <= n; k++) 22 for(i = 1; i <= n; i++) 23 for(j = 1; j <= n; j++) 24 { 25 mymap[i][j] = max( mymap[i][j], mymap[i][k]*mymap[k][j]); 26 } 27 for(i = 1; i <= n; i++) 28 if(mymap[i][i] > 1)//当mymap大于1时就代表可以赚钱 29 { 30 printf("Case %d: Yes\n",flag++); 31 return; 32 } 33 printf("Case %d: No\n",flag++); 34 } 35 36 int main() 37 { 38 int n,m,i,j; 39 char c[100],Str[100],End[100]; 40 double rate; 41 while(cin>>n,n) 42 { 43 getchar(); 44 map<string,int>p; 45 for(i = 1; i <= n; i++) 46 { 47 for(j = 1; j <= n; j++) 48 mymap[i][j] = 0; 49 mymap[i][i] = 1; 50 }//初始化 51 52 for(i = 1; i <= n; i++) 53 { 54 scanf("%s",c); 55 p[c] = i; 56 getchar(); 57 } 58 cin>>m; 59 for(i = 0; i < m; i++) 60 { 61 scanf("%s %lf %s",&Str,&rate,&End); 62 getchar(); 63 mymap[p[Str]][p[End]] = rate; 64 }//输入 65 Floyd(n); 66 } 67 return 0; 68 }
原文:http://www.cnblogs.com/LQBZ/p/4366777.html