求助
  • 板块P1119 灾后重建
  • 楼主Kissir
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/4 22:23
  • 上次更新2023/11/4 22:29:17
查看原帖
求助
407637
Kissir楼主2023/11/4 22:23

求助

洛谷下载第一组数据中,输出答案完全一致,可是全部WA,求调,谢谢

#include <bits/stdc++.h>
using namespace std;
const int M = 50005;
const int N = 405;
const int MAX = 0x3f3f3f3f;

int n, m, s, E, cnt = 0;
int dis[N], head[N], t[N];
bool vis[N];

struct Edge {
	int to, next, w;
} e[N * 2];

struct eee {
	int v, w;
	eee(int _v, int _w) {
		v = _v;
		w = _w;
	}
	friend bool operator < (const eee &a, const eee &b) {
		return a.w > b.w;
	}
};
priority_queue<eee> g;

void add(int u, int v, int w) {
	cnt++;
	e[cnt].to = v;
	e[cnt].w = w;
	e[cnt].next = head[u];
	head[u] = cnt;
}

void Dij() {

	memset(dis, MAX, sizeof(dis));
	if (vis[s]) {
		return ;
	}
	dis[s] = 0;
	g.push({s, 0});
	while (!g.empty()) {
		int to = g.top().v;
		g.pop();
		if (vis[to]) {
			continue;
		}
		vis[to] = true;
		for (int i = head[to]; i != -1; i = e[i].next) {
			int v = e[i].to, w = e[i].w;
			if (!vis[v] && dis[v] > dis[to] + w) {
				dis[v] = dis[to] + w;
				g.push({v, dis[v]});
			}
		}
	}
}

int main() {
	freopen("P1119.in", "r", stdin);
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> t[i];
	}
	for (int i = 0; i <= n; i++) {
		head[i] = -1;
	}
	int x[N], y[N], z[N];
	for (int i = 0; i < m; i++) {
		cin >> x[i] >> y[i] >> z[i];
		add(x[i], y[i], z[i]);
		add(y[i], x[i], z[i]);
	}

	int Q, d;
	cin >> Q;
	for (int qw = 1; qw <= Q; qw++) {
		memset(vis, 0, sizeof(vis));
		cin >> s >> E >> d;
		for (int i = 0; i < n; i++) {
			if (t[i] > d) {
				vis[i] = true;
			} else {
				vis[i] = false;
			}
		}
		Dij();
		if (dis[E] == MAX) {
			cout << -1 << endl;
			continue;
		}
		cout << dis[E] << endl;
	}
	return 0;
}


2023/11/4 22:23
加载中...