Pagini recente » Cod sursa (job #1600658) | Cod sursa (job #2900422) | Cod sursa (job #1450689) | Cod sursa (job #3216154) | Cod sursa (job #3231926)
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#define MAXX 50000
#define INF 200005
int n, m;
int dist[MAXX + 1];
bool viz[MAXX + 1];
int parent[MAXX + 1];
struct cmp
{
bool operator()(int x, int y)
{
return dist[x] > dist[y];
}
};
priority_queue<int, vector<int>, cmp> coada;
vector<pair<int, int>> gf[MAXX + 1];
void dijkstra(int nod)
{
viz[nod] = 1;
for (int i = 1; i <= n; i++)
dist[i] = INF;
dist[nod] = 0;
coada.push(nod);
while (!coada.empty())
{
int nodcurent = coada.top();
coada.pop();
viz[nodcurent] = 0;
for (size_t i = 0; i < gf[nodcurent].size(); i++)
{
int v = gf[nodcurent][i].first;
int w = gf[nodcurent][i].second;
if (dist[nodcurent] + w < dist[v])
{
dist[v] = dist[nodcurent] + w;
if (!viz[v])
{
coada.push(v);
viz[v] = 1;
}
}
}
}
}
int main()
{
cin >> n >> m;
int x, y, cost, i;
for (i = 1; i <= m; i++)
{
cin >> x >> y >> cost;
gf[x].push_back(make_pair(y, cost));
}
dijkstra(1);
for (i = 2; i <= n; i++)
{
if (dist[i] != INF)
cout << dist[i] << " ";
else
cout << "0 ";
}
}