#include <bits/stdc++.h> #define nl '\n' using namespace std; using ll = long long; void solve(){ int n, m; cin>>n>>m; vector<vector<pair<int, ll>>> G(n+1); vector<unordered_set<ll>> sets(n+1); vector<ll> limits(n+1); sets[1].insert(1); sets[n].insert(-1); for(int i=1; i<=n; i++){ cin>>limits[i]; } while(m--){ int a, b; ll c; cin>>a>>b>>c; G[a].push_back({b, c}); } queue<pair<int, ll>> q; q.push({1, 1}); while(q.size()){ auto [v, power] = q.front(); q.pop(); for(auto [i, d]: G[v]){ if(d*power > limits[i] || sets[i].count(d*power)) continue; sets[i].insert(d*power); q.push({i, d*power}); } } ll res = -1; for(auto s: sets[n]){ res = max(res, s); } cout<<res<<nl; } int main() { cin.tie(0)->sync_with_stdio(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 | #include <bits/stdc++.h> #define nl '\n' using namespace std; using ll = long long; void solve(){ int n, m; cin>>n>>m; vector<vector<pair<int, ll>>> G(n+1); vector<unordered_set<ll>> sets(n+1); vector<ll> limits(n+1); sets[1].insert(1); sets[n].insert(-1); for(int i=1; i<=n; i++){ cin>>limits[i]; } while(m--){ int a, b; ll c; cin>>a>>b>>c; G[a].push_back({b, c}); } queue<pair<int, ll>> q; q.push({1, 1}); while(q.size()){ auto [v, power] = q.front(); q.pop(); for(auto [i, d]: G[v]){ if(d*power > limits[i] || sets[i].count(d*power)) continue; sets[i].insert(d*power); q.push({i, d*power}); } } ll res = -1; for(auto s: sets[n]){ res = max(res, s); } cout<<res<<nl; } int main() { cin.tie(0)->sync_with_stdio(0); int t; cin>>t; while(t--){ solve(); } return 0; } |