poj 2240 Arbitrage

来源:互联网 发布:c语言编程训练题 编辑:程序博客网 时间:2024/05/13 11:12

题目:
这里写图片描述
这里写图片描述
思路:
定义个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;}
原创粉丝点击