样例都过不去,对着题解改了半天找不到问题
查看原帖
样例都过不去,对着题解改了半天找不到问题
923248
Lian_zy楼主2024/2/28 18:12

rt,输出 0 3 1,手算完了发现不对

#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 5e3 + 10;
struct node {
	int v, w;
};
queue<int> q;
bool vis[maxn];
vector<node> G[maxn];
int n, m, x, v, w, u, cnt[maxn], dis[maxn];
bool Spfa(int u) {
	for (int i = 1; i <= n; i++) {
		dis[i] = 1e9;
		vis[i] = true;
		q.push(i);
		cnt[i]++;
	}
	dis[u] = 0;
	while (q.size()) {
		x = q.front();
		q.pop();
		vis[x] = false;
		for (auto e : G[x]) {
			v = e.v, w = e.w;
			if (dis[v] > dis[x] + w) {
				dis[v] = dis[x] + w;
				if (vis[v]) continue;
				q.push(v);
				vis[v] = true;
				cnt[v]++;
				if (cnt[v] > n + 1) return false;
			}
		}
	}
	return true;
}
int main() {
	scanf("%d %d", &n, &m); 
	while (m--) {
		scanf("%d %d %d", &u, &v, &w);
		G[u].push_back(node{v, w});
	}
	if (Spfa(1)) for (int i = 1; i <= n; i++) printf("%d ", dis[i]);
    else puts("NO");
	return 0;
} 
2024/2/28 18:12
加载中...