Pagini recente » Cod sursa (job #2011437) | Cod sursa (job #2747580) | Cod sursa (job #1190179) | Cod sursa (job #2944069) | Cod sursa (job #3286948)
#include <fstream>
#include <climits>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
struct ceva
{
int nod;
long long cost;
bool operator<(const ceva& temp) const
{
return cost > temp.cost;
}
};
int n, m;
vector<vector<ceva>> adj;
vector<long long> dist;
vector<bool> vizitat;
void distra(int startingNode)
{
priority_queue<ceva> q;
q.push({ startingNode, 0 });
dist[startingNode] = 0;
while (!q.empty())
{
ceva cur = q.top();
q.pop();
if (!vizitat[cur.nod])
{
vizitat[cur.nod] = true;
for (auto vecin : adj[cur.nod])
{
if (dist[vecin.nod] > (dist[cur.nod] + vecin.cost))
{
dist[vecin.nod] = (dist[cur.nod] + vecin.cost);
q.push({ vecin.nod, dist[vecin.nod] });
}
}
}
}
}
int main()
{
cin >> n >> m;
adj.resize(n + 1);
dist.resize(n + 1, LLONG_MAX);
vizitat.resize(n + 1, false);
for (int i = 1; i <= m; i++)
{
int x, y, cost;
cin >> x >> y >> cost;
adj[x].push_back({y, cost});
}
distra(1);
for (int i = 2; i <= n; i++)
cout << dist[i] << " ";
}