Pagini recente » Cod sursa (job #1896481) | Cod sursa (job #2825955) | Cod sursa (job #427359) | Cod sursa (job #2059174) | Cod sursa (job #2461244)
#include <fstream>
#include <set>
#include <vector>
#include <cstring>
#define pb push_back
using namespace std;
const int N = 50005, oo = 1e9;
int n, dist[N];
vector <pair<int, int> > L[N];
set <pair<int, int> > s;
void Read ()
{
int m;
ifstream fin ("dijkstra.in");
fin >> n >> m;
int i, x, y, cost;
for (i = 1; i <= m; i++)
{
fin >> x >> y >> cost;
L[x].pb({y, cost});
}
}
void Dijkstra ()
{
for (int i = 2; i <= n; i++)
dist[i] = oo;
s.insert({1, 0});
while (!s.empty())
{
int x = s.begin() -> first;
int d = s.begin() -> second;
s.erase(s.begin());
if (L[x].size())
for (auto i : L[x])
{
if (dist[i.first] > d + i.second)
{
if (dist[i.first] != oo)
s.erase(s.find({i.first, dist[i.first]}));
dist[i.first] = d + i.second;
s.insert({i.first, dist[i.first]});
}
}
}
ofstream fout ("dijkstra.out");
for (int i = 2; i <= n; i++)
{
if (dist[i] == oo) dist[i] = 0;
fout << dist[i] << " ";
}
}
int main()
{
Read();
Dijkstra();
return 0;
}