Bellman_ford 70分求助
查看原帖
Bellman_ford 70分求助
393601
墨石楼主2021/8/25 16:13

rt
wa #2 #9 #10

#include <cstdio>
#include <cstring>
#include <algorithm>

using std::min;

const int N = 100005;
const int M = 200005;

int n, m, s;
int u[M], v[M], w[M];
int dis[N];

void bf()
{
	memset(dis, 0x3f, sizeof dis);
	dis[s] = 0;
	
	for (int i = 1; i < n; i++)
	{
		bool si = 0;
		for (int j = 1; j <= m; j++)
		{
			if (dis[u[j]] + w[j] < dis[v[j]])
			{
				dis[v[j]] = dis[u[j]] + w[j];
				
				si = 1;	
			}
		}
		
		if (!si)
		{
			break;
		}
	}
}

int main()
{
	scanf("%d%d%d", &n, &m, &s);
	for (int i = 1; i <= m; i++)
	{
		int a, b, c;
		scanf("%d%d%d", &a, &b, &c);
		u[i] = a;
		v[i] = b;
		w[i] = (!w[i] ? c : min(w[i], c));
	}
	
	bf();
	
	for (int i = 1; i <= n; i++)
	{
		printf("%d ", dis[i] != 0x3f3f3f3f ? dis[i] : 2147483647);
	}
	
	return 0;
}
2021/8/25 16:13
加载中...