Pagini recente » Cod sursa (job #1181703) | Cod sursa (job #1741558) | Cod sursa (job #1417349) | Cod sursa (job #2239161) | Cod sursa (job #2703581)
#include <fstream>
#include <queue>
using namespace std;
ifstream fi("dijkstra.in");
ofstream fo("dijkstra.out");
priority_queue<pair<int,int>> d1;
struct nod { int y, c;
nod* urm; } *v[50001];
int n, p, i, j, k,d[50001],f[50001];
const int inf = 1000000000;
void AdNod(int i, int j, int k)
{
nod* q;
q = new nod;
q->y = j;
q->c = k;
q->urm = v[i];
v[i] = q;
}
void Dijkstra(int p)
{
nod* q;
int mi,i,j;
q = v[p];
d[0] = inf;
d[p] = 0;
f[p] = 1;
while (q != NULL)
{
d[q->y] = q->c;
q = q->urm;
}
for(i=1; i<=n; i++)
if(d[i]!= inf)
d1.push(make_pair(-1*d[i],i));
for (i = 1; i < n; i++)
{
mi = d1.top().second;
if (!d1.empty())
{
f[mi] = 1;
q = v[mi];
while (q != NULL)
{
if (d[q->y] > d[mi] + q->c)
{
d[q->y] = d[mi] + q->c;
d1.push(make_pair(-1*d[q->y],q->y));
}
q = q->urm;
}
}
d1.pop();
}
}
int main()
{
fi >> n >> p;
for (i = 1; i <= n; i++)
{
v[i] = NULL;
d[i] = inf;
}
while (fi >> i >> j >> k)
AdNod(i, j, k);
Dijkstra(1);
for (i = 2; i <= n; i++)
{
if (d[i] == inf)
fo << 0 << " ";
else fo << d[i] << " ";
}
return 0;
}