点击打开链接
#include <iostream>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
map<string,int>str;
int v,e;
const int maxv=50+5;
double G[maxv][maxv];
void floyd()
{
for(int k=1;k<=v;k++)
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++)
G[i][j]=max(G[i][j],G[i][k]*G[k][j]);
}
int main()
{
int kase=0;
while(scanf("%d",&v)==1&&v)
{
str.clear();
for(int i=1;i<=v;i++)
{
char ss[maxv];
scanf("%s",ss);
str[ss]=i;
}
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++)
if(i==j) G[i][j]=1;
else G[i][j]=0; //表明没有货币交换关系
scanf("%d",&e);
for(int i=0;i<e;i++)
{
char v1[maxv],v2[maxv];
double cost;
cin>>v1>>cost>>v2;
G[str[v1]][str[v2]]=cost; //有向图
}
floyd();
bool flag=false;
for(int i=1;i<=v;i++)
if(G[i][i]>1) {
flag=true;
break;
}
printf("Case %d: ",++kase);
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
hdu 1217 floyd
最新推荐文章于 2020-03-21 12:48:07 发布