Pagini recente » Istoria paginii runda/eusebiu_oji_2011_cls11-12 | Cod sursa (job #1119077) | Monitorul de evaluare | Cod sursa (job #962034) | Cod sursa (job #602893)
Cod sursa(job #602893)
#include <iostream>
#include <vector>
using namespace std;
#define maxN 50005
#define PB push_back
#define MP make_pair
#define inf (1 << 30)
vector < pair <int, int> > lista[maxN];
int cost[maxN];
bool cont[maxN];
int N, M;
int get_minim()
{
int minim = inf, poz;
for (int i = 1; i <= N; ++ i)
{
if (cont[i]) continue;
if (cost[i] < minim)
{
minim = cost[i];
poz = i;
}
}
cont[poz] = true;
return poz;
}
int main()
{
freopen ("dijkstra.in", "r", stdin);
freopen ("dijkstra.out", "w", stdout);
scanf ("%d %d", &N, &M);
for (int i = 1; i <= M; ++ i)
{
int x, y, cosst;
scanf ("%d %d %d", &x, &y, &cosst);
lista[x].PB ( MP (y, cosst) );
}
for (int i = 1; i <= N; ++ i) cost[i] = inf;
cost[1] = 0;
for (int i = 1; i <= N; ++ i)
{
int nod = get_minim ();
for (unsigned int t = 0; t < lista[nod].size(); ++ t)
{
int node = lista[nod][t].first;
cost[node] = min (cost[node], cost[nod] + lista[nod][t].second);
}
}
for (int i = 2; i <= N; ++ i)
if (cost[i] != inf) printf ("%d ", cost[i]);
else printf ("0 ");
return 0;
}