链接:点击打开链接
题意:有一些钱的汇率,看是否有一种钱经过兑换能够产生利润
代码;
#include <map>
#include <queue>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
double dp[105][105];
map<string,int> mp;
int main(){
double s;
string str0,str1;
int i,j,k,n,m,sidp,cas=1;
while(scanf("%d",&n)!=EOF&&n){ //标号后直接floyd
mp.clear();
for(i=1;i<=n;i++){
cin>>str0;
mp[str0]=i;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dp[i][j]=0;
scanf("%d",&m);
while(m--){
cin>>str0>>s>>str1;
dp[mp[str0]][mp[str1]]=s;
}
for(k=1;k<=n;k++){
for(i=1;i<=n;i++){
for(j=1;j<=n;j++) //要注意是乘法
dp[i][j]=max(dp[i][j],dp[i][k]*dp[k][j]);
}
}
sidp=0;
for(i=1;i<=n;i++)
if(dp[i][i]>1)
sidp=1;
if(sidp)
printf("Case %d: Yes\n",cas++);
else
printf("Case %d: No\n",cas++);
}
return 0;
}