Pagini recente » Cod sursa (job #804265) | Cod sursa (job #2812848) | Cod sursa (job #2822044) | Cod sursa (job #282224) | Cod sursa (job #1457366)
#include <fstream>
#include <vector>
#include <set>
#define NMAX 50001
#define inf 2000000000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m, dist[NMAX];
vector < pair < int, int > > v[NMAX];
set < pair < int, int> > heap;
void read()
{
f >> n >> m;
int a, b, c;
for (int i=1; i<=m; ++i)
{
f >> a >> b >> c;
v[a].push_back(make_pair(b,c));
}
}
void initialize()
{
for (int i=2; i<=n; ++i)
dist[i] = inf;
dist[1] = 0;
}
void dijkstra()
{
initialize();
heap.insert(make_pair(1,0));
while (heap.size())
{
int minim = heap.begin() -> first;
heap.erase(heap.begin());
for (vector < pair < int, int> > :: iterator it = v[minim].begin(); it != v[minim].end(); ++it)
if (dist[it -> first] > dist[minim] + it -> second)
{
dist[it -> first] = dist[minim] + it -> second;
heap.insert(make_pair(it -> first, dist[it -> first]));
}
}
}
int main()
{
read();
dijkstra();
for (int i=2; i<=n; ++i)
if (dist[i] == inf)
g << "0 ";
else
g << dist[i] << " ";
return 0;
}