转化过加法还是错的,索性就不转了,样例双yes
#include <bits/stdc++.h>
using namespace std;
struct node{
int l , r;
double w;
};
node e[10010];
int n , m , tot;
double dis[10010];
bool ford(int s){
memset(dis , 0 , sizeof(dis));
dis[s] = 1;
for(int i = 1; i < n; i++)
for(int j = 1; j <= m; j++)
if(dis[e[j].r] < dis[e[j].l] * e[j].w)
dis[e[j].r] = dis[e[j].l] * e[j].w;
for(int i = 1; i <= n; i++)
if(dis[i] > 1){
//for(int j = 1; j <= n; j++) cout << dis[j] << " ";
//cout << endl;
return true;
}
return false;
}
int main(){
while(1){
cin >> n;
if(!n) break;
map<string , int> id;
for(int i = 1; i <= n; i++){
string x;
cin >> x;
id[x] = i;
}
cin >> m;
for(int i = 1; i <= m; i++){
string x , y;
double z;
cin >> x >> z >> y;
e[i].l = id[x] , e[i].r = id[y] , e[i].w = z;
}
int f = 0;
for(int i = 1; i <= n; i++)
if(ford(i)){
f = 1;
break;
}
cout << "Case " << ++tot << ": ";
if(f) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}