Memory | Time | Language | Code Length |
---|---|---|---|
276K | 94MS | C++ | 946B |
const int maxn = 31;
string currents[maxn];
double map[maxn][maxn];
int n, m;
int GetIndex(string &s){
int i;
for(i=0; i<n; i++) {
if(s == currents[i])
return i;
}
return -1;
}
bool Floyd(){
int i, j, k;
for(k=0; k<n; k++) {
for(i=0; i<n; i++) {
for(j=0; j<n; j++)
if(map[i][j] < map[i][k]*map[k][j])
map[i][j] = map[i][k]*map[k][j];
}
}
for(i=0; i<n; i++) {
if(map[i][i] > 1)
return true;
}
return false;
}
int main() {
int count = 0;
while(cin>>n && n) {
int i;
string s1, s2;
double r;
for(i=0; i<n; i++) {
cin>>currents[i];
map[i][i] = 1;
}
cin>>m;
for(i=0; i<m; i++) {
cin>>s1;
cin>>r;
cin>>s2;
map[GetIndex(s1)][GetIndex(s2)] = r;
}
printf("Case %d: ", ++count);
if (Floyd())
printf("Yes/n");
else
printf("No/n");
}
return 0;
}