Pagini recente » Cod sursa (job #1558451) | Cod sursa (job #1077370) | Cod sursa (job #1866685) | Cod sursa (job #532547) | Cod sursa (job #3272242)
#include <iostream>
#include <fstream>
#include <queue>
#include <set>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector<pair<int, int>>h[50005];
int n, m, p;
int d[50001];
void Dijkstra(int p)
{
set <pair<int, int> >S;
for (int i = 1; i <= n; i++)
d[i] = 2e9;
d[p] = 0;
S.insert({ 1, p });
while (!S.empty())
{
int cost = S.begin()->first;
int nod = S.begin()->second;
S.erase(S.begin());
for (auto i : h[nod])
if (d[nod] + i.first < d[i.second])
{
S.erase({ d[i.second],i.second });
d[i.second] = d[nod] + i.first;
S.insert({ d[i.second], i.second });
}
}
}
int main()
{
int x, y, z;
fin >> n >> m;
for (int i = 1; i <= m; i++)
{
fin >> x >> y >> z;
h[x].push_back({ z, y });
/// h[y].push_back({x, z});
}
Dijkstra(1);
for (int i = 2; i <= n; i++)
if (d[i] == 2e9) fout << "0 ";
else fout << d[i] << " ";
return 0;
}