求助 全RE了,但是数组已经开的足够大了,想不明白为什么
查看原帖
求助 全RE了,但是数组已经开的足够大了,想不明白为什么
235637
借我昔日热忱楼主2020/11/4 09:29

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;
}
2020/11/4 09:29
加载中...