#include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, n) for (int i = 0; i < (n); i++) #define pb push_back #define st first #define nd second void solve() { int n, m; cin >> n >> m; ll p[n]; rep(i, n) { cin >> p[i]; } queue<pair<int, ll>> q; set<ll> odw[n]; vector<pair<int, ll>> graf[n]; q.push({0, 1}); odw[0].insert(1ll); rep(i, m) { int a, b; ll w; cin >> a >> b >> w; a--; b--; graf[a].pb({b, w}); } ll ans = -1; while (!q.empty()) { pair<int, ll> para = q.front(); q.pop(); int v = para.st; ll waga = para.nd; if (v == n - 1) { ans = max(ans, waga); } for (auto kraw: graf[v]) { ll x = waga * kraw.nd; int w = kraw.st; if (p[w] < x) { continue; } if (odw[w].find(x) != odw[w].end()) { continue; } odw[w].insert(x); q.push({w, x}); } } cout << ans << '\n'; cout.flush(); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while (t--) { solve(); } return 0; }
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 56 57 58 59 60 61 62 63 64 | #include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, n) for (int i = 0; i < (n); i++) #define pb push_back #define st first #define nd second void solve() { int n, m; cin >> n >> m; ll p[n]; rep(i, n) { cin >> p[i]; } queue<pair<int, ll>> q; set<ll> odw[n]; vector<pair<int, ll>> graf[n]; q.push({0, 1}); odw[0].insert(1ll); rep(i, m) { int a, b; ll w; cin >> a >> b >> w; a--; b--; graf[a].pb({b, w}); } ll ans = -1; while (!q.empty()) { pair<int, ll> para = q.front(); q.pop(); int v = para.st; ll waga = para.nd; if (v == n - 1) { ans = max(ans, waga); } for (auto kraw: graf[v]) { ll x = waga * kraw.nd; int w = kraw.st; if (p[w] < x) { continue; } if (odw[w].find(x) != odw[w].end()) { continue; } odw[w].insert(x); q.push({w, x}); } } cout << ans << '\n'; cout.flush(); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while (t--) { solve(); } return 0; } |