Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
193899 luckypet 银行转帐 C++ 通过 100 0 MS 248 KB 1391 2025-05-27 14:35:51

Tests(10/10):


#include <iostream> #include <vector> #include <queue> #include <iomanip> using namespace std; struct Edge { int to; double rate; // 剩余比例,例如99%表示为0.99 }; int main() { int n, m; cin >> n >> m; vector<vector<Edge>> adj(n + 1); // 1-based indexing for (int i = 0; i < m; ++i) { int a, b, c; cin >> a >> b >> c; double rate = (100.0 - c) / 100.0; adj[a].push_back({b, rate}); adj[b].push_back({a, rate}); } int A, B; cin >> A >> B; vector<double> max_rate(n + 1, 0.0); // 从A到各节点的最大乘积 vector<bool> visited(n + 1, false); priority_queue<pair<double, int>> pq; // 大顶堆 max_rate[A] = 1.0; pq.push({1.0, A}); while (!pq.empty()) { int u = pq.top().second; pq.pop(); if (visited[u]) continue; visited[u] = true; for (const Edge& e : adj[u]) { int v = e.to; double new_rate = max_rate[u] * e.rate; if (new_rate > max_rate[v]) { max_rate[v] = new_rate; pq.push({max_rate[v], v}); } } } double min_amount = 100.0 / max_rate[B]; cout << fixed << setprecision(8) << min_amount << endl; return 0; }


测评信息: