求助qwq
  • 板块P1119 灾后重建
  • 楼主XYzero
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/8/18 15:32
  • 上次更新2023/11/3 02:53:54
查看原帖
求助qwq
917025
XYzero楼主2023/8/18 15:32

floyd只能30

#include<bits/stdc++.h>
using namespace std;
const int N = 205;
const int INF = 1e9;
int n,m,q;
int a[N];
struct add{
	int y,w;
};
int e[N][N];
void floyd(int k)
{
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			if(e[i][j] > e[i][k] + e[j][k])
			e[j][i] = e[i][j] = e[i][k] + e[j][k];
			
		}
    }
}
int main(){

	cin >> n >> m;
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(i == j)e[i][j] = 0;
			else e[i][j] = INF;
		}
	}
	for(int i = 0;i < n;i++)
	{
		cin >> a[i]; 
	}
	for(int i = 1;i <= m;i++){
		int x,y,w;
		cin >> x >> y >> w;
		e[x][y] = w;
		e[y][x] = w;
	}
	cin >> q;
	int tmp = 0;
	while(q--){
		int x,y,t;
		cin >> x >> y >> t;
		while(a[tmp] <= t && tmp < n){
			floyd(tmp);
			tmp++;
		}
		if(a[x] > t || a[y] > t){
			cout << "-1" << endl;
		}
		if(e[x][y] == INF){
			cout << "-1" << endl;
		}
		else cout << e[x][y] << endl;

	}
	
	return 0;
}
2023/8/18 15:32
加载中...