Pagini recente » Cod sursa (job #1809822) | Cod sursa (job #540411) | Cod sursa (job #960887) | Cod sursa (job #1659464) | Cod sursa (job #1846171)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
FILE *f = fopen("dijkstra.in", "r");
FILE *g = fopen("dijkstra.out", "w");
const int NMAX = 50001;
#define INF 2000000000
int n, m;
vector < vector < pair < int, int > > > V(NMAX);
int D[NMAX];
void read()
{
int i, x, y, cost;
fscanf(f, "%d%d", &n, &m);
for (i = 1; i <= m; ++ i)
{
fscanf(f, "%d%d%d", &x, &y, &cost);
V[x].push_back(make_pair(y, cost));
}
}
void dijkstra(int source)
{
int v, d, v2, cost, i;
priority_queue < pair < int, int >, vector < pair < int, int > >, greater < pair < int, int > > > PQ;
pair < int, int > top;
vector < pair < int, int > > :: iterator it;
for (i = 1; i <= n; ++ i)
D[i] = INF;
D[source] = 0;
PQ.push(make_pair(source, 0));
while (!PQ.empty())
{
top = PQ.top();
PQ.pop();
v = top.first;
d = top.second;
if (d <= D[v])
{
for (it = V[v].begin(); it != V[v].end(); ++ it)
{
v2 = (*it).first;
cost = (*it).second;
if (D[v2] > D[v] + cost)
{
D[v2] = D[v] + cost;
PQ.push(make_pair(v2, D[v2]));
}
}
}
}
}
void print()
{
int i;
for (i = 2; i <= n; ++ i)
if (D[i] != INF)
fprintf(g, "%d ", D[i]);
else
fprintf(g, "0 ");
}
int main()
{
read();
dijkstra(1);
print();
return 0;
}