floyd只能30
#include<bits/stdc++.h>
using namespace std;
const int N = 205;
const int INF = 1e9;
int n,m,q;
int a[N];
struct add{
int y,w;
};
int e[N][N];
void floyd(int k)
{
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(e[i][j] > e[i][k] + e[j][k])
e[j][i] = e[i][j] = e[i][k] + e[j][k];
}
}
}
int main(){
cin >> n >> m;
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
if(i == j)e[i][j] = 0;
else e[i][j] = INF;
}
}
for(int i = 0;i < n;i++)
{
cin >> a[i];
}
for(int i = 1;i <= m;i++){
int x,y,w;
cin >> x >> y >> w;
e[x][y] = w;
e[y][x] = w;
}
cin >> q;
int tmp = 0;
while(q--){
int x,y,t;
cin >> x >> y >> t;
while(a[tmp] <= t && tmp < n){
floyd(tmp);
tmp++;
}
if(a[x] > t || a[y] > t){
cout << "-1" << endl;
}
if(e[x][y] == INF){
cout << "-1" << endl;
}
else cout << e[x][y] << endl;
}
return 0;
}