#include <bits/stdc++.h> using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); long long t; cin >> t; while (t--) { long long n, m; cin >> n >> m; vector<long long> cap(n + 1); for (long long i = 1; i <= n; i++) cin >> cap[i]; vector<vector<pair<long long, long long>>> graph(n + 1); for (long long i = 0; i < m; i++) { long long a, b, w; cin >> a >> b >> w; graph[a].push_back({b, w}); } vector<unordered_set<long long>> best(n + 1); queue<pair<long long, long long>> q; best[1].insert(1); q.push({1, 1}); while (!q.empty()) { auto [u, curr] = q.front(); q.pop(); for (auto &edge : graph[u]) { long long v = edge.first; long long fac = edge.second; long long nxt = curr * fac; if (nxt <= cap[v]) { long long nxti = nxt; if (best[v].find(nxti) == best[v].end()) { best[v].insert(nxti); q.push({v, nxti}); } } } } if (best[n].empty()) cout << -1 << "\n"; else { long long ans = 0; for (auto v : best[n]) ans = max(ans, v); cout << ans << "\n"; } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <bits/stdc++.h> using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); long long t; cin >> t; while (t--) { long long n, m; cin >> n >> m; vector<long long> cap(n + 1); for (long long i = 1; i <= n; i++) cin >> cap[i]; vector<vector<pair<long long, long long>>> graph(n + 1); for (long long i = 0; i < m; i++) { long long a, b, w; cin >> a >> b >> w; graph[a].push_back({b, w}); } vector<unordered_set<long long>> best(n + 1); queue<pair<long long, long long>> q; best[1].insert(1); q.push({1, 1}); while (!q.empty()) { auto [u, curr] = q.front(); q.pop(); for (auto &edge : graph[u]) { long long v = edge.first; long long fac = edge.second; long long nxt = curr * fac; if (nxt <= cap[v]) { long long nxti = nxt; if (best[v].find(nxti) == best[v].end()) { best[v].insert(nxti); q.push({v, nxti}); } } } } if (best[n].empty()) cout << -1 << "\n"; else { long long ans = 0; for (auto v : best[n]) ans = max(ans, v); cout << ans << "\n"; } } } |