除了第一个输出其他的输出都大的离谱,为什么?错在哪?
查看原帖
除了第一个输出其他的输出都大的离谱,为什么?错在哪?
1251853
linglu1YGking楼主2025/7/26 09:25
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,w;
int mp[205][205],tim[205];
#define inf 0x3f3f3f3f

void update(int k){
	for(int i=0;i<n;i++)
	for(int j=0;j<n;j++){
		if(mp[i][j]>mp[i][k]+mp[k][j]);
		    mp[i][j]=mp[j][i]=mp[i][k]+mp[k][j];
	}
	return ;
}

void check(int a,int b,int t){
	if(tim[a]>t || tim[b]>t){
		printf("-1\n");
		return ;
	}
	else if(mp[a][b]==inf){
		printf("-1\n");
		return ;
	}
	else{
		printf("%d\n",mp[a][b]);
		return ;
	}
}

int main(){
	memset(mp,inf,sizeof(mp));
	memset(tim,inf,sizeof(tim));
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++){
		scanf("%d",&tim[i]);
		mp[i][i]=0;
	} 
	for(int i=0;i<m;i++){
		scanf("%d%d%d",&x,&y,&w);
		mp[x][y]=mp[y][x]=w;
	}
	int q;
	scanf("%d",&q);
	int now=0; //´åׯÐòºÅ 
	int a,b,t;
	while(q--){
		scanf("%d%d%d",&a,&b,&t);
		while(tim[now]<=t && now<n){
			update(now);
			now++;
		}
		check(a,b,t);
	}
	return 0;
}







2025/7/26 09:25
加载中...