满江红+过样例+30min订眼查误=>求条
查看原帖
满江红+过样例+30min订眼查误=>求条
681558
Weizhuo_Zhao楼主2025/1/17 22:24
#include <bits/stdc++.h>
using namespace std;
const int yhy = 255, tiger_king = 50005;
int n, m, a[yhy], f[yhy][yhy];

struct awa {
	int u, v, t;
};
awa problem[tiger_king];

bool cmp(awa x, awa y) {
	return x.t < y.t;
}

int main() {
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++)
			f[i][j] = INT_MAX / 2;
		f[i][i] = 0;
	}
	for (int i = 0; i < n; i++)
		cin >> a[i];
	while (m--) {
		int u, v, w;
		cin >> u >> v >> w;
		f[u][v] = w;
		f[v][u] = w;
	}
	int q, k = 0;
	cin >> q;
	for (int i = 1; i <= q; i++)
		cin >> problem[i].u >> problem[i].v >> problem[i].t;
	sort(problem + 1, problem + q + 1, cmp);
	for (int qwq = 1; qwq <= q; qwq++) {
		int u = problem[qwq].u, v = problem[qwq].v, t = problem[qwq].t;
		while (a[k] <= t && k < n) {
			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[j][i] = f[i][k] + f[k][j];
			k++;
		}
		if (a[u] > t || a[v] > t) {
			puts("-1");
			continue;
		}
		if (f[u][v] == INT_MAX / 2) {
			puts("-1");
			continue;
		}
		cout << f[u][v] << '\n';
	}
	return 0;
}
2025/1/17 22:24
加载中...