rt
数组已经开的足够大了,第一个样例下载之后输入输出都正确,不知道为什么RE,哪位大佬解答一下
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int t[1000],dis[1000][1000];
inline void updata(int k){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if( dis[i][k]+dis[k][j]<dis[i][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
inline int read(){
int x=0,dis=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch='-')dis=-1;ch=getchar(); }
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*dis;
}
int main(){
n=read();m=read();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
dis[i][j]=1e9;
}
for(int i=0;i<n;i++)
dis[i][i]=0;
for(int i=0;i<n;++i)
t[i]=read();
for(int i=1;i<=m;i++){
int x,y,w;
x=read();y=read();w=read();
dis[x][y]=dis[y][x]=w;
}
int now=0;
int k;k=read();
for(int i=1;i<=k;++i){
int x,y,w;
x=read();y=read();w=read();
while(t[now]<=w&&now<n){
updata(now);now++;
}
if(t[x]>w||t[y]>w)printf("-1\n");
else {
if(dis[x][y]==1e9)printf("-1\n");
else printf("%d\n",dis[x][y]);
}
}
return 0;
}