SPFA 78分求助!!!
  • 板块P1807 最长路
  • 楼主CWJ1029
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/3/12 11:40
  • 上次更新2023/10/23 21:47:44
查看原帖
SPFA 78分求助!!!
338117
CWJ1029楼主2023/3/12 11:40
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

int n , m , vis[2005] , dis[2005] , cnt[2005];
vector<int> v[2005] , w[2005];

bool spfa()
{
	for (int i = 1; i <= n; i++) dis[1] = 2e9;
	queue<int> q;
	q.push(1);
	vis[1] = 1;
	dis[1] = 0;
	cnt[1]++;
	while (!q.empty())
	{
		int x = q.front();
		q.pop();
		vis[x] = 0;
		if (cnt[x] == n) return 1;
		for (int i = 0; i < v[x].size(); i++)
		{
			int y = v[x][i];
			if (dis[y] > dis[x] + w[x][i])
			{
				dis[y] = dis[x] + w[x][i];
				if (!vis[y])
				{
					vis[y] = 1;
					q.push(y);
					cnt[y]++;
				}
			}
		}
	}
	return 0;
}

int main()
{
	scanf("%d%d" , &n , &m);
	for (int i = 1; i <= m; i++)
	{
		int x , y , cost;
		scanf("%d%d%d" , &x , &y , &cost);
		v[x].push_back(y);
		w[x].push_back(-1 * cost);
	}
	if (spfa()) printf("-1");
	else printf("%d" , -1 * dis[n]);
	
	return 0;
}
2023/3/12 11:40
加载中...