bellman #9 WA求调,悬两关
查看原帖
bellman #9 WA求调,悬两关
1162093
jimmy0926楼主2024/9/4 21:44
#include <cstdio>
#include <cstring>

int t, n, m, dis[2001];
struct Edge {
	int start, to, w, nxt;
} eg[6001];
int head[2001], ptr;

inline int min(int a, int b) {return (a < b ? a : b);}

bool bellman() {
	memset(dis, 0x7f, sizeof dis);
	dis[1] = 0;
	for (int i = 1; i < n; ++i)
		for (int j = 1; j <= ptr; ++j)
			if (dis[eg[j].start] != 0x7f7f7f7f)
				dis[eg[j].to] = min(dis[eg[j].to], dis[eg[j].start] + eg[j].w);
	for (int j = 1; j <= ptr; ++j)
		if (dis[eg[j].start] != 0x7f7f7f7f && dis[eg[j].to] != 0x7f7f7f7f && dis[eg[j].start] + eg[j].w < dis[eg[j].to])
			return 1;
	return 0;
}

int main() {
	scanf("%d", &t);
	while (t--) {
		memset(head, 0, sizeof head);
		ptr = 0;
		scanf("%d%d", &n, &m);
		for (int i = 1; i <= m; ++i) {
			int u, v, w;
			scanf("%d%d%d", &u, &v, &w);
			eg[++ptr] = {u, v, w, head[u]};
			head[u] = ptr;
			if (w > 0) {
				eg[++ptr] = {v, u, w, head[v]};
				head[v] = ptr;
			}
		}
		printf("%s\n", (bellman() ? "YES" : "NO"));
	}
	return 0;
}

谢谢大佬们

2024/9/4 21:44
加载中...