Floyd最短路60分求助(T_T)
查看原帖
Floyd最短路60分求助(T_T)
947854
ztyo_zysclown楼主2024/8/18 10:57

WA1 3 5 6

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
template <typename T> void read(T&x){
	int sign=1;x=0;char c;
	do{	c=getchar();	if(c=='-')sign=-1;	}while(!isdigit(c));
	do{	x=x*10+c-'0';	c=getchar();	}while(isdigit(c));
	x*=sign;
}
int f[1145][1145];
int n,m;
const int N=3e6+10;
int a[N];
int op=0x3f3f3f3f3f/2;
signed  main(){
	read(n);
	read(m);
	for(int i=0;i<n;i++){
		read(a[i]);
	}
	memset(f,0x3f,sizeof(f));
	for(int i=0;i<n;i++){
		f[i][i]=0;
	}
	while(m--){
		int x,y,w;
		read(x);
		read(y);
		read(w);
		f[x][y]=w;
		f[y][x]=w;
	}
	int q;
	read(q);
	int k=0;
	while(q--){
		int x,y,z;
		cin>>x>>y>>z;
		if(a[x]>z||a[y]>z){
			cout<<"-1"<<endl;
			continue;
		}
		while(a[k]<=z&&k<=z){
    		for(int i=0;i<n;i++){
    			for(int j=0;j<n;j++){
    				if(f[i][j]>f[i][k]+f[k][j]){
    					f[i][j]=f[i][k]+f[k][j];
					}
				}
			}
			k++;
		}
		if(f[x][y]>=op){
			cout<<"-1"<<endl;	
		}
		else{
			cout<<f[x][y]<<endl;
		}
	}
	return 0;
}

2024/8/18 10:57
加载中...