添加链接描述
floyd求最短路。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=203,INF=0x3f3f3f3f3f3f3f3f;
int a[maxn][maxn],t[maxn],n,m;
void flo(int cnt)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=min(a[i][j],a[i][cnt]+a[cnt][j]);
}
int main()
{
cin>>n>>m;
memset(a,INF,sizeof(a));
for(int i=0;i<n;i++)
a[i][i]=0;
for(int i=0;i<n;i++)
cin>>t[i];
for(int i=0;i<m;i++)
{
int x,y,w;
cin>>x>>y>>w;
a[x][y]=w;
a[y][x]=w;
}
int inq,now=0;
cin>>inq;
for(int i=0;i<inq;i++)
{
int x,y,tt;
cin>>x>>y>>tt;
while(t[now]<=tt&&now<n)
{
flo(now);
now++;
}
if(a[x][y]>=INF) cout<<-1<<endl;
else if(tt<t[x]||tt<t[y])
cout<<-1<<endl;
else
cout<<a[x][y]<<endl;
}
return 0;
}