Bellman-Ford思路求助!
查看原帖
Bellman-Ford思路求助!
617314
TigerTanWQY楼主2023/9/10 20:22

本人 Bellman-Ford 求负环除 #11 外都 AC。请问这是为什么?

#include <cstdio>
using namespace std;

const int INF = 0x3f3f3f3f;
struct
{ int x, y, v; }
G[6003];
int dist[2003], n, m = 0;

inline bool BellmanFord(const int &s)
{
	for(int i = 1; i <= n; ++i)
		dist[i] = INF;
	dist[s] = 0;
	bool ret = false;
	for(int cnt = 1; ; ++cnt)
	{
		bool flag = false;
		for(int i = 1; i <= m; ++i)
		{
			int x = G[i].x, y = G[i].y, v = G[i].v;
			if(dist[x] + v < dist[y])
			{
				dist[y] = dist[x] + v;
				flag = true;
			}
		}
		if(!flag)
			break;
		if(cnt >= n)
		{
			ret = true;
			break;
		}
	}
	return ret;
}

int main()
{
	int T;
	scanf("%d", &T);
	while(T--)
	{
		int cnt;
		scanf("%d%d", &n, &cnt);
		while(cnt--)
		{
			int u, v, w;
			scanf("%d%d%d", &u, &v, &w);
			G[++m] = {u, v, w};
			if(w >= 0)
				G[++m] = {v, u, w};
		}
		if(BellmanFord(1))
			printf("YES\n");
		else
			printf("NO\n");
		m = 0;
	}
	return 0;
}
2023/9/10 20:22
加载中...