题目:
思路:
定义个map
#include<iostream>
#include<map>
#include<string>
using namespace std;
map<string, int> curr;
double dis[31][31];
double d[31];
int n,i;
bool bellman() {
for (i = 0; i < n; i++) {
memset(d, 0, sizeof(d));
d[i] = 1;
int j, k, l;
for (j = 0; j < n; j++)
for (k = 0; k < n; k++)
for (l = 0; l < n; l++)
if (d[k] < (d[l] * dis[l][k])) d[k] = d[l] * dis[l][k];
if (d[i] > 1) return 1;
}
return 0;
}
int main() {
int c=0,m;
string a, b;
double t;
while (scanf_s("%d", &n)&&n) {
for (i = 0; i < n; i++) {
cin >> a;
curr[a] = i;
}
scanf_s("%d", &m);
for (i = 0; i < m; i++) {
cin >> a >> t >> b;
dis[curr[a]][curr[b]] = t;
}
printf("Case %d: %s\n", ++c,bellman()?"Yes":"No");
}
return 0;
}