代码如下,能过样例
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll MAX=0x7f7f7f;
ll tt[201],d[201][201],t,n,m,a,b,w,Q,x,y,ttt=-1;
bool f,v[201][201];
void print(ll x,ll y)
{
if(f==0)
{
if(d[x][y]==MAX||d[y][x]==MAX)
{
printf("-1");
f=1;
return;
}
printf("%lld",d[x][y]);
f=1;
return;
}
if(d[x][y]==MAX||d[y][x]==MAX)
{
printf("\n-1");
f=1;
return;
}
printf("\n%lld",d[x][y]);
}
void F(ll x,ll y)
{
for(int k=0;k<n;k++)
{
for(int i=0;i<n;i++)
{
if(k!=i)
{
for(int j=0;j<n;j++)
{
if(i!=j&&k!=j&&d[i][k]+d[k][j]<d[i][j]&&v[i][k]==true&&v[i][j]==true&&v[k][j]==true)
{
d[i][j]=d[i][k]+d[k][j];
}
}
}
}
}
print(x,y);
}
int main()
{
freopen("rebuild.in","r",stdin);
freopen("rebuild.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
d[i][j]=MAX;
}
}
for(int i=0;i<n;i++)
{
scanf("%lld",&tt[i]);
}
for(int i=0;i<m;i++)
{
scanf("%lld%lld%lld",&a,&b,&w);
d[a][b]=d[b][a]=w;
}
scanf("%lld",&Q);
for(int i=0;i<Q;i++)
{
scanf("%lld%lld%lld",&x,&y,&t);
if(tt[x]>t||tt[y]>t)
{
if(f==1)
{
printf("\n-1");
}
else
{
printf("-1");
f=1;
}
continue;
}
if(ttt!=t)
{
memset(v,true,sizeof(v));
for(int k=0;k<n;k++)
{
if(tt[k]>t)
{
for(int j=0;j<n;j++)
{
v[k][j]=v[j][k]=false;
}
}
}
ttt=t;
F(x,y);
}
print(x,y);
}
return 0;
}