#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e2;
int t, n, m, p[N + 1], a, b, w, updates;
vector<pair<int, ll>> G[N + 1];
set <ll> old_vals[N + 1], new_vals[N + 1], temp;
void update() {
for(int i = 1 ; i <= n ; i++) {
temp = new_vals[i];
old_vals[i].insert(new_vals[i].begin(), new_vals[i].end());
new_vals[i].clear();
for(auto val : temp) {
for(auto edge : G[i]) {
ll new_val = val * edge.second;
if(new_val <= p[edge.first] && old_vals[edge.first].find(new_val) == old_vals[edge.first].end() && new_vals[edge.first].find(new_val) == new_vals[edge.first].end()) {
new_vals[edge.first].insert(new_val);
updates++;
}
}
}
}
}
int main() {
cin>>t;
while(t--) {
cin>>n>>m;
for(int i = 1 ; i <= n ; i++) {
G[i].clear();
old_vals[i].clear();
new_vals[i].clear();
cin >> p[i];
}
for(int i = 1 ; i <= m ; i++) {
cin>>a>>b>>w;
G[a].push_back({b, w});
}
new_vals[1].insert(1);
updates = 1;
while(updates) {
updates = 0;
update();
}
if(!old_vals[n].empty()){
ll max_val = *old_vals[n].rbegin();
cout<<max_val<<"\n";
}
else cout<<"-1\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 | #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1e2; int t, n, m, p[N + 1], a, b, w, updates; vector<pair<int, ll>> G[N + 1]; set <ll> old_vals[N + 1], new_vals[N + 1], temp; void update() { for(int i = 1 ; i <= n ; i++) { temp = new_vals[i]; old_vals[i].insert(new_vals[i].begin(), new_vals[i].end()); new_vals[i].clear(); for(auto val : temp) { for(auto edge : G[i]) { ll new_val = val * edge.second; if(new_val <= p[edge.first] && old_vals[edge.first].find(new_val) == old_vals[edge.first].end() && new_vals[edge.first].find(new_val) == new_vals[edge.first].end()) { new_vals[edge.first].insert(new_val); updates++; } } } } } int main() { cin>>t; while(t--) { cin>>n>>m; for(int i = 1 ; i <= n ; i++) { G[i].clear(); old_vals[i].clear(); new_vals[i].clear(); cin >> p[i]; } for(int i = 1 ; i <= m ; i++) { cin>>a>>b>>w; G[a].push_back({b, w}); } new_vals[1].insert(1); updates = 1; while(updates) { updates = 0; update(); } if(!old_vals[n].empty()){ ll max_val = *old_vals[n].rbegin(); cout<<max_val<<"\n"; } else cout<<"-1\n"; } } |
English