社区讨论

瑾时后人

P3385【模板】负环参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjy41d36
此快照首次捕获于
2026/01/03 17:38
2 个月前
此快照最后确认于
2026/01/07 12:45
2 个月前
查看原帖
注意本题的边数不是m
如代码
CPP
#include <bits/stdc++.h>
using namespace std;

int T;

struct edge {
	int from;
	int to;
	int w;
};

int main() {
	cin >> T;
	while (T--) {
		int n, m;
		cin >> n >> m;
		vector<edge> e;
		int d[4001];
		memset(d, 0x7f, sizeof (d));
		d[1] = 0;
		for (int i = 1; i <= m; i++) {
			int u, v, w;
			cin >> u >> v >> w;
			if (w >= 0) {
				e.push_back({u, v, w});
				e.push_back({v, u, w});
			} else {
				e.push_back({u, v, w});
			}
		}
		for (int i = 1; i < n; i++) {
			for (int j = 0; j < e.size(); j++) {//  此处不是j < m
				if (d[e[j].from] != 0x7f7f7f7f) {
					d[e[j].to] = min(d[e[j].to], d[e[j].from] + e[j].w);
				}
			}
		}
		bool flag = true;
		for (int j = 0; j < e.size(); j++) {//  此处同理
			if (d[e[j].from] != 0x7f7f7f7f && d[e[j].to] > d[e[j].from] + e[j].w) {
				flag = false;
				break;
			}
		}
		if (flag) {
			cout << "NO\n";
		} else {
			cout << "YES\n";
		}
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...