Pagini recente » Cod sursa (job #1163681) | Cod sursa (job #1958428) | Cod sursa (job #669571) | Cod sursa (job #946389) | Cod sursa (job #3265831)
#include <iostream>
#include <vector>
#include <set>
#include <fstream>
using namespace std;
const int NMAX = 1e5;
const long long INF = 1e18;
vector<pair<int, int>> G[NMAX + 1];
long long d[NMAX + 1];
int vis[NMAX + 1];
int p[NMAX + 1];
int main()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m;
f >> n >> m;
for (int i = 1; i <= m; ++i)
{
int x, y, c;
f >> x >> y >> c;
G[x].push_back({ y, c });
}
for (int i = 1; i <= n; ++i)
d[i] = INF;
d[1] = 0;
set<pair<long long, int>> s; // (distanta, nod)
s.insert({ d[1], 1 });
int nc = 0;
while (!s.empty())
{
if (nc == n - 1)
break;
auto it = s.begin();
int node = (*it).second;
s.erase(it);
if (vis[node])
continue;
vis[node] = 1;
nc++;
for (auto next : G[node])
{
int vecin = next.first;
int cost_muchie = next.second;
if (d[vecin] > d[node] + cost_muchie)
{
d[vecin] = d[node] + cost_muchie;
p[vecin] = node;
s.insert({ d[vecin], vecin });
}
}
}
// long long maxim = 0;
// for (int i = 2; i <= n; ++i)
// maxim = max(maxim, d[i]);
// for (int i = 2; i <= n; ++i)
// if (d[i] == maxim)
// cout << i << ' ';
for (int i = 2; i <= n; ++i)
if (d[i] == INF)
g << "0 ";
else
g << d[i] << ' ';
return 0;
}