#3wa
查看原帖
#3wa
776799
GODTREE楼主2024/4/4 12:38
#include <iostream>
#include <vector>
#include <climits>
#include <cmath>
using namespace std;

#define eps 1e-11
#define int long long
#define N 10005

struct edge 
{
	int to, val;
};

const int inf = LLONG_MAX / 2;
vector<edge> G[N];
int n, m, s, dis[N], book[N];

void add(int u, int v, int w) 
{
	G[u].push_back({v, w});
}
signed main() 
{
	cin >> n >> m >> s;
	for (int i = 1; i <= m; i++) 
	{
		int u, v, w;
		cin >> u >> v >> w;
		add(u, v, w);
	}
	for (int i = 1; i <= n; i++) 
	{
		dis[i] = inf;
	}
	dis[s] = 0;
	for (int i = 1; i <= n; i++) 
	{
		int minn = inf, t = -1;
		for (int j = 1; j <= n; j++)
		{
			if (book[j] == 0 && minn > dis[j]) 
			{
				minn = dis[j];
				t = j;
			}
		}
		if (t == -1) break; 
		book[t] = 1;
		for (auto &e : G[t]) 
		{
			int v = e.to, w = e.val;
			if (dis[v] > dis[t] + w) 
			{
				dis[v] = dis[t] + w;
			}
		}
	}
	for (int i = 1; i <= n;i++) 
	{
		cout<< dis[i] << " ";
	}
	return 0;
}
2024/4/4 12:38
加载中...