spfa求助,只有20pts
查看原帖
spfa求助,只有20pts
727008
lwx20211103楼主2023/8/15 13:01
#include <bits/stdc++.h>
#define p_b push_back
#define ft first
#define nd second
#define pii pair<int, int>
#define pll pair<long long, long long>
using namespace std;

typedef long long ll;

vector<pii> g[2500];
int n, m;
ll dist[2500], mark[2500], d[2500];

void solve()
{
	cin >> n >> m;
	for (int i = 1; i <= 2500; i++) g[i].clear();
	for (int i = 1; i <= m; i++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		if (w >= 0)
		{
			g[u].p_b({w, v});
			g[v].p_b({w, u});
		}
		else g[u].p_b({w, v});
	}
	queue<int> q;
	
	memset(dist, 0x3f3f3f3f, sizeof(dist));
	memset(mark, 0, sizeof(mark));
	memset(d, 0, sizeof(d));
	q.push(1);
	mark[1] = 1;
	dist[1] = 0;
	while (!q.empty())
	{
		int hd = q.front();
		q.pop();
		for (auto i : g[hd])
		{
			int to = i.nd, edge = i.ft;
			if (dist[to] > dist[hd] + edge)
			{
				dist[to] = dist[hd] + edge;
				d[to] = d[hd] + 1;
				if (d[to] >= n)
				{
					cout << "YES" << "\n";
					return ;
				}
				if (!mark[to])
				{
					mark[to] = 1;
					q.push(to);
				}
			}
		}
	}
	cout << "NO" << "\n";
}

int main()
{
//	freopen("lwx.in", "r", stdin);
//	freopen("lwx.out", "w", stdout);
	int t;
	cin >> t;
	while (t--)
	{
		solve();
	}
	return 0;
}

我一直没有找到错误

2023/8/15 13:01
加载中...