题意:有n种货币m种兑换方式,现在要看货币体系稳不稳定,就是看有没有某种货币经过一系列的兑换可以使本身价值上升!
题解:Floyd。
第一次用map和string,看来真的很好用啊~~
好了,直接贴代码。相似的题还有POJ1860,不过那道题我懒得发题解了,而且那道题也没拿Floyd做。
#include <map>
#include <string>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 100
#define eps 1e-6
#define inf 0x3f3f3f3f
using namespace std;
map<string,int>AKL;
int n,m;
double rate,mapr[N][N];
string ttt,tt1,tt2;
int main()
{
// freopen("test.in","r",stdin);
int i,j,k,flag,g=0;
while(scanf("%d",&n),n)
{
flag=0;
printf("Case %d: ",++g);
memset(mapr,0x40,sizeof(mapr));
for(i=1;i<=n;i++)
{
cin>>ttt;
AKL[ttt]=i;
mapr[i][i]=1.0;
}
scanf("%d",&m);
for(i=1;i<=m;i++)
{
cin>>tt1>>rate>>tt2;
mapr[AKL[tt1]][AKL[tt2]]=rate;
}
for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)mapr[i][j]=max(mapr[i][j],mapr[i][k]*mapr[k][j]);
for(i=1;i<=n;i++)if(mapr[i][i]-1.0>eps){flag=1;break;}
if(flag)puts("Yes");
else puts("No");
}
return 0;
}