#include <bits/stdc++.h> using namespace std; #define loop(i, a, b) for(int i = a; i <= b; i++) #define loop_rev(i, a, b) for(int i = a; i >= b; i--) #define all(x) x.begin(), x.end() #define sz(x) int(x.size()) #define pb push_back using _ll = long long; #define int _ll void solve(); signed main() { cin.tie(0)->sync_with_stdio(0); int t; cin >> t; while(t--) solve(); } vector<vector<pair<int, int>>> graph; vector<unordered_set<int>> ma; vector<int> lim; void rec(int v, int prod) { ma[v].insert(prod); for(auto [ s, w ] : graph[v]) { int new_prod = prod * w; if(new_prod <= lim[s] && !ma[s].count(new_prod)) { rec(s, new_prod); } } } void solve() { int n, m; cin >> n >> m; decltype(graph)(n + 1).swap(graph); decltype(lim)(n + 1).swap(lim); decltype(ma)(n + 1).swap(ma); loop(i, 1, n) { cin >> lim[i]; } loop(i, 1, m) { int a, b, w; cin >> a >> b >> w; graph[a].pb({ b, w }); graph[b].pb({ a, w }); } rec(1, 1); int res = 0; for(int prod : ma[n]) { res = max(res, prod); } if(res == 0) { cout << "-1\n"; } else { cout << res << '\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 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include <bits/stdc++.h> using namespace std; #define loop(i, a, b) for(int i = a; i <= b; i++) #define loop_rev(i, a, b) for(int i = a; i >= b; i--) #define all(x) x.begin(), x.end() #define sz(x) int(x.size()) #define pb push_back using _ll = long long; #define int _ll void solve(); signed main() { cin.tie(0)->sync_with_stdio(0); int t; cin >> t; while(t--) solve(); } vector<vector<pair<int, int>>> graph; vector<unordered_set<int>> ma; vector<int> lim; void rec(int v, int prod) { ma[v].insert(prod); for(auto [ s, w ] : graph[v]) { int new_prod = prod * w; if(new_prod <= lim[s] && !ma[s].count(new_prod)) { rec(s, new_prod); } } } void solve() { int n, m; cin >> n >> m; decltype(graph)(n + 1).swap(graph); decltype(lim)(n + 1).swap(lim); decltype(ma)(n + 1).swap(ma); loop(i, 1, n) { cin >> lim[i]; } loop(i, 1, m) { int a, b, w; cin >> a >> b >> w; graph[a].pb({ b, w }); graph[b].pb({ a, w }); } rec(1, 1); int res = 0; for(int prod : ma[n]) { res = max(res, prod); } if(res == 0) { cout << "-1\n"; } else { cout << res << '\n'; } } |