#include <iostream> #include <vector> #include <set> using namespace std; void input(int & n, int & m, vector<long long> & power, vector<vector<pair<long long, long long>>> & neigh) { cin >> n >> m; power.resize(n, 0); for(int i = 0; i < n; i++) { cin >> power[i]; } neigh.resize(n); for(int i = 0; i < m; i++) { long long a, b, w; cin >> a >> b >> w; neigh[a-1].push_back({b-1, w}); } } void dfs(pair<long long, long long> const v, vector<long long> const & power, vector<vector<pair<long long, long long>>> const & neigh, set<pair<long long, long long>> & visited) { for(auto const & neig : neigh[v.first]) { if(power[neig.first] >= v.second*neig.second && !visited.count({neig.first, v.second*neig.second})) { visited.insert({neig.first, v.second*neig.second}); dfs({neig.first, v.second*neig.second}, power, neigh, visited); } } } void solve() { int n; int m; vector<long long> power; vector<vector<pair<long long, long long>>> neigh; input(n, m, power, neigh); set<pair<long long, long long>> visited; visited.insert({0,1}); dfs({0,1}, power, neigh, visited); long long result = -1; for(auto const & vis : visited) { if(vis.first == n-1 && vis.second > result) { result = vis.second; } } cout << result << "\n"; } int main(){ ios_base::sync_with_stdio(0); cin.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 | #include <iostream> #include <vector> #include <set> using namespace std; void input(int & n, int & m, vector<long long> & power, vector<vector<pair<long long, long long>>> & neigh) { cin >> n >> m; power.resize(n, 0); for(int i = 0; i < n; i++) { cin >> power[i]; } neigh.resize(n); for(int i = 0; i < m; i++) { long long a, b, w; cin >> a >> b >> w; neigh[a-1].push_back({b-1, w}); } } void dfs(pair<long long, long long> const v, vector<long long> const & power, vector<vector<pair<long long, long long>>> const & neigh, set<pair<long long, long long>> & visited) { for(auto const & neig : neigh[v.first]) { if(power[neig.first] >= v.second*neig.second && !visited.count({neig.first, v.second*neig.second})) { visited.insert({neig.first, v.second*neig.second}); dfs({neig.first, v.second*neig.second}, power, neigh, visited); } } } void solve() { int n; int m; vector<long long> power; vector<vector<pair<long long, long long>>> neigh; input(n, m, power, neigh); set<pair<long long, long long>> visited; visited.insert({0,1}); dfs({0,1}, power, neigh, visited); long long result = -1; for(auto const & vis : visited) { if(vis.first == n-1 && vis.second > result) { result = vis.second; } } cout << result << "\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) { solve(); } return 0; } |