#include <iostream> #include <vector> #include <cstring> #include <cmath> using namespace std; const double eps = 1e-6; const double INF = 1e9; struct Edge { int from, to; double rate, commission; }; vector<Edge> edges; double dis[105]; int n, m, s; double v; bool bellman_ford() { memset(dis, 0, sizeof(dis)); dis[s] = v; for (int i = 1; i <= n; i++) { for (int j = 0; j < edges.size(); j++) { Edge e = edges[j]; if (dis[e.from] > eps && dis[e.from] * e.rate - e.commission > dis[e.to]) { dis[e.to] = dis[e.from] * e.rate - e.commission; if (i == n) return true; } } } return false; } int main() { cin >> n >> m >> s >> v; for (int i = 1; i <= m; i++) { int a, b; double rab, cab, rba, cba; cin >> a >> b >> rab >> cab >> rba >> cba; edges.push_back({a, b, rab, cab}); edges.push_back({b, a, rba, cba}); } if (bellman_ford()) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
时间: 2024-04-27 19:23:40 浏览: 28
#include <iostream>
这段代码是什么意思?
这段代码实现了一个汇率变化的判定问题。给定一个起始货币的金额v以及n个货币,m个汇率转换规则。每个汇率转换规则包含两个货币之间的汇率和手续费。问是否可以通过多次汇率转换将v增加到超过原来的值。如果可以,输出"YES",否则输出"NO"。
代码中使用Bellman-Ford算法求解该问题,如果存在负权环则说明可以进行无限次汇率转换,从而将v增加到超过原来的值。
阅读全文