Pagini recente » Cod sursa (job #2383232) | Cod sursa (job #938839) | Cod sursa (job #29677) | Cod sursa (job #1622530) | Cod sursa (job #2419004)
#include <bits/stdc++.h>
using namespace std;
vector <pair<int, int> > A[50001];
const int inf = 1 << 30;
int d[50001];
set <pair<int, int> >S;
int afis[50001];
int viz[50001];
int main()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m;
f>>n>>m;
for (int i = 0; i < m; i++)
{
int x, y, c;
f>>x>>y>>c;
A[x].push_back(make_pair(y, c));
}
for (int i = 2; i <= n; i++)
{
S.insert(make_pair(i, inf));
d[i] = inf;
}
S.insert(make_pair(1, 0));
int node = 1;
for (int i = 1; i <= n; i++)
{
pair<int,int> p = *(S.begin());
node = p.first;
for (int j = 0; j < A[node].size(); j++)
{
if (d[node] + A[node][j].second < d[A[node][j].first])
{
S.erase(make_pair(A[node][j].first, d[A[node][j].first]));
d[A[node][j].first] = d[node] + A[node][j].second;
S.insert(make_pair(A[node][j].first, d[A[node][j].first]));
}
}
S.erase(p);
for (int i = 2; i <= n; i++)
{
if (d[i] != inf )g<<d[i]<<" ";
else g<<0<<" ";
}
return 0;
}