hdu1217 floyd

时间:2023-03-09 23:37:11
hdu1217 floyd

floyd一遍即可。如果floyd后值有变大就是

#include<map>
#include<string>
#include<stdio.h>
#include<string.h>
#include<iostream>
#define INF 99999999
using namespace std;
const int maxn=;
double mmap[maxn][maxn],val;
int n;
void init()
{
int i,j;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
mmap[i][j]=;
}
void floyd()
{
int i,j,k;
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
if(mmap[i][j]<mmap[i][k]*mmap[k][j])
mmap[i][j]=mmap[i][k]*mmap[k][j];
}
}
int main()
{
int i,j,m,ff=;
string s;
while(scanf("%d",&n)!=EOF)
{
if(!n)break;
init();
int count=;
map<string,int>Map;
for(i=;i<n;i++)
{
cin>>s;
Map[s]=++count;
}
scanf("%d",&m);
string s1,s2;
for(i=;i<m;i++)
{
cin>>s1;
scanf("%lf",&val);
cin>>s2;
if(mmap[Map[s1]][Map[s2]]<val)
mmap[Map[s1]][Map[s2]]=val;
}
floyd();
int flag=;
for(i=;i<=n;i++)
if(mmap[i][i]>)
{
flag=;
break;
}
if(flag)
{
printf("Case %d: Yes\n",++ff);
}
else printf("Case %d: No\n",++ff);
}
}