时间:2016-04-05 10:00:40 星期二
题目编号:[2016-04-05][POJ][2240][Arbitrage]
题目大意:给定n种货币,和m种对换比例,是否能通过兑换货币而获利
分析:
#include <map>#include <cstring>#include <iostream>#include <cstdio>#include <string>using namespace std;const int maxn = 30 + 5;double d[maxn][maxn];int main(){ map<string ,int> m; int n,_m,cntcase = 0; string str,str2; double rij; while(cin>>n && n){ for(int i = 1;i <= n ; ++i){ cin>>str; m[str] = i; } cin>>_m; memset(d,0,sizeof(d)); for(int i = 0;i < _m ; ++i){ cin>>str>>rij>>str2; d[m[str]][m[str2]] = rij; } //floyd for(int k = 1; k <= n ; ++k) for(int i = 1; i <= n ; ++i) for(int j = 1;j <= n ; ++j) d[i][j] = max(d[i][j],d[i][k]*d[k][j]); printf("Case %d: ",++cntcase); int flg = 0; for(int i = 1;i <=n ;++i){ if(d[i][i] > 1.0){ flg = 1;break; } } if(flg) puts("Yes"); else puts("No"); } return 0;}