给出一些国家之间的汇率,看看能否从中发现某些肮脏的......朋友交易。
这是Floyd的应用,dp思想,每次都选取最大值,最后看看自己跟自己的.....交易是否大于一。。。。
#include<iostream> #include<cstring> #include<queue> #include<cstdio> #include<map> using namespace std; #define exp 0.00000001 map<string,int>ma; double dp[33][33]; bool Equal(double a,double b) { if(a-b > exp) return true; return false; } int main() { int n,ca = 0; while(~scanf("%d",&n) && n) { string a; ma.clear(); memset(dp,0,sizeof(dp)); for(int i = 1;i <= n;i++) { cin >> a; ma[a] = i; dp[i][i] = 1; } int m; scanf("%d",&m); for(int i = 1;i <= m;i++) { string fr,to; int fr1,to1; double k; cin>>fr>>k>>to; fr1 = ma[fr],to1 = ma[to]; dp[fr1][to1] = k; } for(int k = 1;k <= n;k++) { for(int i = 1;i <= n;i++) { for(int j = 1;j <= n;j++) dp[i][j] = max(dp[i][j],dp[i][k] * dp[k][j]); } } bool flag = true; for(int i = 1;i <= n;i++) { if(Equal(dp[i][i],1.0)) { flag = false; break; } } printf("Case %d: ",++ca); if(flag) printf("No "); else printf("Yes "); } return 0; }