#include <bits/stdc++.h>
#define mn 200009
#define ull unsigned long long
#define ll long long
#define int long long
#define in insert
#define eb emplace_back
#define f first
#define s second
#define pill pair<int, ll>
using namespace std;
int t, n, m;
ll tab[mn], best;
vector<pill> v[mn];
set<ll> vis[mn];
void dfs(int w, ll si) {
if(w==n) best=max(best, si);
if(vis[w].count(si)) return;
vis[w].in(si);
for(auto it:v[w]) if(si*it.s<=tab[it.f]) dfs(it.f, si*it.s);
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>t;
int a, b;
ll w;
while(t--) {
cin>>n>>m;
for(int i=1; i<=n; ++i){ cin>>tab[i]; v[i].clear(); vis[i].clear(); }
for(int i=0; i<m; ++i){ cin>>a>>b>>w; v[a].eb(b, w); }
best=0;
dfs(1, 1);
cout<<(best?best:-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 | #include <bits/stdc++.h> #define mn 200009 #define ull unsigned long long #define ll long long #define int long long #define in insert #define eb emplace_back #define f first #define s second #define pill pair<int, ll> using namespace std; int t, n, m; ll tab[mn], best; vector<pill> v[mn]; set<ll> vis[mn]; void dfs(int w, ll si) { if(w==n) best=max(best, si); if(vis[w].count(si)) return; vis[w].in(si); for(auto it:v[w]) if(si*it.s<=tab[it.f]) dfs(it.f, si*it.s); } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>t; int a, b; ll w; while(t--) { cin>>n>>m; for(int i=1; i<=n; ++i){ cin>>tab[i]; v[i].clear(); vis[i].clear(); } for(int i=0; i<m; ++i){ cin>>a>>b>>w; v[a].eb(b, w); } best=0; dfs(1, 1); cout<<(best?best:-1)<<"\n"; } } |
English