Pagini recente » Cod sursa (job #713953) | Cod sursa (job #1633562) | Cod sursa (job #375095) | Cod sursa (job #2536624) | Cod sursa (job #363646)
Cod sursa(job #363646)
#include<stdio.h>
#include<set>
#include<vector>
using namespace std;
int M;
short int N;
vector< pair<short int, short int> > G[50035];
short int D[50001];
const int inf = 1001;//999999999;
set< pair<short int, short int> > heap;
int main()
{
short int u, v, c, i, ind = 0, m[50001], minim;
int j;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%hd %d", &N, &M);
for(i = 1; i <= M; i++)
{
scanf("%hd %hd %hd", &u, &v, &c); // u->v cost c
G[u].push_back( make_pair(v, c) );
}
heap.insert( make_pair(0, 1) );
for(i = 2; i <= N; i++)
{
D[i] = inf;
heap.insert( make_pair(D[i], i) );
}
// dijkstra
for(i = 1; i <= N-1; i++)
{
pair<int, int> p = *heap.begin();
ind = p.second;
heap.erase(heap.begin()); // sterge radacina
int nr_v = G[ind].size();
for (j = 0; j < nr_v; j++)
{
int v = G[ind][j].first;
int c = G[ind][j].second;
if (D[ind] + c < D[v])
{
heap.erase(heap.find( make_pair(D[v], v) ));
D[v] = D[ind] + c; // relaxare
heap.insert( make_pair(D[v], v) );
}
}
}
for (i = 2; i <= N; i++)
if (D[i] == inf)
printf("0 ");
else
printf("%d ", D[i]);
printf("\n");
return 0;
}