#include <iostream>
#include <vector>
#include <queue>
#include <unordered_set>
using namespace std;
int solve(){
int n,m;
cin>>n>>m;
vector<int> p(n);
for (int i=0; i<n; i++){
cin>>p[i];
}
vector<vector < pair<int, int>>> W(n); // target,weight
for (int i=0; i<m; i++){
int a,b,w;
cin>>a>>b>>w;
a--;
b--;
W[a].push_back(make_pair(b,w));
}
queue < pair <int, int> > Q;//index, val;
Q.push(make_pair(0,1));
vector<unordered_set < int >> voltages(n);
voltages[0].insert(1);
while (!Q.empty()){
int index;
int level;
tie(index, level) = Q.front();
Q.pop();
for (int i=0; i<W[index].size(); i++){
int amp;
int target;
tie (target,amp ) = W[index][i];
if ( amp * (int64_t)level <= p[target]){
int new_level = amp*level;
if (!voltages[target].contains(new_level )){
Q.push(make_pair(target, new_level));
voltages[target].insert(new_level);
}
}
}
}
int maxx=-1;
for (auto v:voltages.back()){
if (v>maxx)
maxx=v;
}
return maxx;
}
int main()
{
int t;
cin>>t;
for (int i=0; i<t; i++){
cout<<solve()<<endl;
}
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <iostream> #include <vector> #include <queue> #include <unordered_set> using namespace std; int solve(){ int n,m; cin>>n>>m; vector<int> p(n); for (int i=0; i<n; i++){ cin>>p[i]; } vector<vector < pair<int, int>>> W(n); // target,weight for (int i=0; i<m; i++){ int a,b,w; cin>>a>>b>>w; a--; b--; W[a].push_back(make_pair(b,w)); } queue < pair <int, int> > Q;//index, val; Q.push(make_pair(0,1)); vector<unordered_set < int >> voltages(n); voltages[0].insert(1); while (!Q.empty()){ int index; int level; tie(index, level) = Q.front(); Q.pop(); for (int i=0; i<W[index].size(); i++){ int amp; int target; tie (target,amp ) = W[index][i]; if ( amp * (int64_t)level <= p[target]){ int new_level = amp*level; if (!voltages[target].contains(new_level )){ Q.push(make_pair(target, new_level)); voltages[target].insert(new_level); } } } } int maxx=-1; for (auto v:voltages.back()){ if (v>maxx) maxx=v; } return maxx; } int main() { int t; cin>>t; for (int i=0; i<t; i++){ cout<<solve()<<endl; } return 0; } |
English