代码:
#include<bits/stdc++.h>
#define int long long
#define dis first
#define pos second
using namespace std;
map<int,int> mp;
int n,m,x,y,z,k,dis[205];
struct node{
int to,dis;
};
vector<node> v[205];
bool b,vis[205];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
void dijkstra(int x,int t){
memset(vis,0,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
dis[x]=0;
q.push({0,x});
while(!q.empty()){
int d=q.top().dis,p=q.top().pos;
q.pop();
if(vis[p]) continue;
vis[p]=1;
for(int i=0;i<v[p].size();++i){
int a=v[p][i].to,b=v[p][i].dis;
if(d+b<dis[a]&&mp[p]<=t&&mp[a]<=t){
dis[a]=d+b;
q.push({dis[a],a});
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=0;i<n;++i){
cin>>x;
mp[i]=x;
}
for(int i=1;i<=m;++i){
cin>>x>>y>>z;
v[x].push_back({y,z});
v[y].push_back({x,z});
}
cin>>k;
for(int i=1;i<=k;++i){
b=0,cin>>x>>y>>z;
if(mp[x]>z||mp[y]>z) b=1;
else{
dijkstra(x,z);
if(!vis[y]) b=1;
}
if(b==1) cout<<-1<<'\n';
else cout<<dis[y]<<'\n';
}
return 0;
}
码风太丑,轻喷