You should pay attention to the input is directed.
The portal :http://acm.hdu.edu.cn/showproblem.php?pid=1217
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <map>
#include <algorithm>
#include <iostream>
#define eps 1e-8
using namespace std;
map<string,int>mp;
double d[35][35];
void Input(){
int n,t=1;
while(~scanf("%d",&n),n){
mp.clear();
char tempa[105];
string a,b ;
int k = 0;
for(int i=0;i<n;i++){
scanf("%s",tempa);
a = tempa;
mp[a] = k++;
}
int m;
scanf("%d",&m);
char tempb[105];
double tempr;
memset(d,0,sizeof(d));
for(int i=0;i<=30;i++){
d[i][i] = 1.0;
}
for(int i=0;i<m;i++){
scanf("%s %lf %s",tempa,&tempr,tempb);
a = tempa; b = tempb;
d[mp[a]][mp[b]] = tempr;
// d[mp[b]][mp[a]] = 1.0/tempr;
}
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(d[i][j]<d[i][k]*d[k][j])
d[i][j] = d[i][k]*d[k][j];
}
}
}
int flag = 0;
for(int i=0;i<n;i++){
if(d[i][i]>1.0)flag = 1;
}
printf("Case %d: ",t++);
if(flag)
puts("Yes");
else
puts("No");
}
}
int main(void){
// freopen("a.in","r",stdin);
Input();
return 0;
}