玄关求条
查看原帖
玄关求条
1385862
liyelei楼主2025/7/25 16:59

WA on #1#2#9

#include <bits/stdc++.h>
using namespace std;
vector< pair<int, int> > g[100001];
int vis[100001], dis[100001], cnt[100001];
const int inf = 0x3f3f3f3f;
bool spfa(int n) {
	queue<int> q;
	for (int i = 1; i <= n; i++) {
		dis[i] = inf;
	}
	dis[1] = 0;
	vis[1] = 1;
	q.push(1);
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		for (auto t : g[u]) {
			int v = t.first, w = t.second;
			if (dis[v] > dis[u] + w) {
				dis[v] = dis[u] + w;
				if (!vis[v]) {
					q.push(v);
					vis[v] = 1;
					cnt[v]++;
					if (cnt[v] > n) return 1;
				}
			}
		}
		vis[u] = 0;
	}
	return 0;
}
int main() {
	int t;
	cin >> t;
	while (t--) {
		int n, m;
		cin >> n >> m;
		for (int i = 1; i <= n; i++) {
		    g[i].clear(); 
		    vis[i] = 0;   
		    cnt[i] = 0;   
		}
		for (int i = 1; i <= m; i++) {
			int u, v, w;
			cin >> u >> v >> w;
			if (w > 0) { g[u].push_back({v, w}); g[v].push_back({u, w}); }
			else { g[u].push_back({v, w}); }
		}
		if (spfa(n)) cout << "YES\n";
		else cout << "NO\n";
	}
	return 0;
}
2025/7/25 16:59
加载中...