#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"; } } } |
English