这份代码为什么交上去后显示运行错误
题目描述: 给定n个点的完全图,每个点有一个风险值ai,有m次询问,每次询问给定两个点s和t,分别为起点和终点,然后给定一个值w,现在询问s到t的最短路,要求经过的所有点的风险值不超过w(经过的点不包含s和t)。
样例能过,也能运行
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
inline int read()
{
int num=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {num=(num<<1)+(num<<3)+ch-'0';ch=getchar();}
return num*w;
}
int T;
int n,m;
int now,qwq;
int mapp[2001][2001];
struct node
{
int dis;
int id;
}a[200001];
struct lsh
{
int s;
int t;
int w;
int id;
int ans;
}q[200001];
inline bool cmp(node xx,node yy) {return xx.dis<yy.dis;}
inline bool cmp_1(lsh xx,lsh yy) {return xx.w<yy.w;}
inline bool cmp_2(lsh xx,lsh yy) {return xx.id<yy.id;}
inline void flowd(int k)
{
for(register int i=1;i<=n;i++)
{
for(register int j=1;j<=n;j++)
mapp[i][j]=min(mapp[i][j],mapp[i][k]+mapp[k][j]);
}
return;
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
T=read();
while(T--)
{
scanf("%d%d",&n,&m);
for(register int i=1;i<=n;i++) scanf("%d",&a[i].dis),a[i].id=i;
for(register int i=1;i<=n;i++)
{
for(register int j=1;j<=n;j++)
scanf("%d",&mapp[i][j]);
}
for(register int i=1;i<=m;i++) scanf("%d%d%d",&q[i].s,&q[i].t,&q[i].w),q[i].id=i;
sort(a+1,a+1+n,cmp);
sort(q+1,q+1+m,cmp_1);
qwq=1,now=0;
while(now<m)
{
while(a[qwq].dis<=q[now].w)
{
flowd(qwq);
qwq++;
}
now++;
q[now].ans=mapp[q[now].s][q[now].t];
}
sort(q+1,q+1+m,cmp_2);
for(register int i=1;i<=m;i++) printf("%d\n",q[i].ans);
}
//fclose(stdin);
//fclose(stdout);
return 0;
}