求调
查看原帖
求调
1030048
GavinWang楼主2025/1/20 15:05

只会输出no,不会输出yes。求调

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int MAXN = 2e3 + 5;
struct edge {int v, w;};
vector<edge> G[MAXN];
queue<int> q;
int dis[MAXN], cnt[MAXN];
bool vis[MAXN], flag;

void init() {
	flag = false;
	memset(dis, 0x3f, sizeof(dis));
	memset(cnt, 0, sizeof(cnt));
	memset(vis, 0, sizeof(vis));
	while (!q.empty()) q.pop();
}

bool spfa() {
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) G[i].clear();
	for (int i = 1; i <= m; ++i) {
		int u, v, w;
		cin >> u >> v >> w;
		G[u].push_back({v, w});
		if (w >= 0) G[v].push_back({u, w});
	}
	
	dis[0] = 0;
	vis[0] = true;
	q.push(0);
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		vis[u] = false;
		for (auto x : G[u]) {
			int v = x.v, w = x.w;
			if (dis[u] + w < dis[v]) {
				dis[v] = dis[u] + w;
				cnt[v] = cnt[u] + 1;
				if (cnt[v] >= n) return true;
				if (!vis[v]) {
					q.push(v);
					vis[v] = true;
				} 
			}
		}
	}
	return false;
}

int main() {
	int t;
	cin >> t;
	while (t--) {
		init();
		if (spfa()) cout << "Yes\n";
		else cout << "No\n";
	}
	return 0;
}
2025/1/20 15:05
加载中...