#include <bits/stdc++.h>
using namespace std;
#ifdef DEBUG
auto &operator<<(auto &o, pair<auto, auto> p) {
return o << "(" << p.first << ", " << p.second <<")";
}
auto operator<<(auto &o, auto x)-> decltype(x.end(), o) {
o << "{";int i = 0;
for(auto e : x) o << ", "+!i++<<e;
return o <<"}";
}
#define debug(x...) cerr << "["#x"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(x)
#else
#define debug(...) {}
#endif
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()
#define pb push_back
#define fi first
#define se second
typedef pair <int, int> pii;
const int B = 5e7+1;
constexpr int N = 102;
bitset <B> vis[N];
unordered_set <int> viss[N];
vector <pii> G[N];
int A[N];
int n;
int res;
inline bool visited(int v, int x) {
return (x < B && vis[v][x]) || (viss[v].find(x) != viss[v].end());
}
inline void visit(int v, int x) {
if (x < B) vis[v][x] = 1;
else viss[v].insert(x);
}
void dfs(int v, int x) {
debug(v, x);
if (visited(v, x)) return;
visit(v, x);
if (v == n) {
res = max(res, x);
}
for (auto &[u, y] : G[v]) {
if ((long long) y * x <= A[u])
dfs(u, y*x);
}
}
void test() {
debug("TC______________________");
int m; cin>>n>>m;
res = -1;
for (int i=1; i<=n; ++i) {
cin>>A[i];
}
for (int i=1; i<=n; ++i) {
A[i] = min(A[i], A[n]);
}
for (int i=0; i<m; ++i) {
int a, b, c; cin>>a>>b>>c;
G[a].push_back({b, c});
}
dfs(1, 1);
cout<<res<<'\n';
for (int i=1; i<=n; ++i) {
G[i].clear();
A[i] = 0;
vis[i] = bitset<B>(0);
viss[i].clear();
}
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int t = 1; cin>>t;
while (t--) {
test();
}
}
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #include <bits/stdc++.h> using namespace std; #ifdef DEBUG auto &operator<<(auto &o, pair<auto, auto> p) { return o << "(" << p.first << ", " << p.second <<")"; } auto operator<<(auto &o, auto x)-> decltype(x.end(), o) { o << "{";int i = 0; for(auto e : x) o << ", "+!i++<<e; return o <<"}"; } #define debug(x...) cerr << "["#x"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(x) #else #define debug(...) {} #endif #define all(x) x.begin(), x.end() #define sz(x) (int)(x).size() #define pb push_back #define fi first #define se second typedef pair <int, int> pii; const int B = 5e7+1; constexpr int N = 102; bitset <B> vis[N]; unordered_set <int> viss[N]; vector <pii> G[N]; int A[N]; int n; int res; inline bool visited(int v, int x) { return (x < B && vis[v][x]) || (viss[v].find(x) != viss[v].end()); } inline void visit(int v, int x) { if (x < B) vis[v][x] = 1; else viss[v].insert(x); } void dfs(int v, int x) { debug(v, x); if (visited(v, x)) return; visit(v, x); if (v == n) { res = max(res, x); } for (auto &[u, y] : G[v]) { if ((long long) y * x <= A[u]) dfs(u, y*x); } } void test() { debug("TC______________________"); int m; cin>>n>>m; res = -1; for (int i=1; i<=n; ++i) { cin>>A[i]; } for (int i=1; i<=n; ++i) { A[i] = min(A[i], A[n]); } for (int i=0; i<m; ++i) { int a, b, c; cin>>a>>b>>c; G[a].push_back({b, c}); } dfs(1, 1); cout<<res<<'\n'; for (int i=1; i<=n; ++i) { G[i].clear(); A[i] = 0; vis[i] = bitset<B>(0); viss[i].clear(); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; cin>>t; while (t--) { test(); } } |
English