Pagini recente » Cod sursa (job #298999) | Cod sursa (job #811974) | Cod sursa (job #676241) | Cod sursa (job #1921974) | Cod sursa (job #2832962)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int INF = 0x3f3f3f3f;
const int NMAX = 50005;
int n, m;
int D[NMAX];
bool InQueue[NMAX];
struct numar
{
int nr, c;
};
vector <numar> G[NMAX];
struct cmp
{
bool operator()(int x, int y)
{
return D[x] > D[y];
}
};
priority_queue <int,vector <int>, cmp> Q;
int main()
{
numar t;
int prim = 1, nod_curent;
int a, b, c;
fin >> n >> m;
for(int i = 1; i <= n; i++)
D[i] = INF;
D[prim] = 0;
for(int i = 1; i <= m; i++)
{
fin >> a >> b >> c;
t.nr = b;
t.c = c;
G[a].push_back(t);
}
Q.push(prim);
InQueue[prim] = true;
while(!Q.empty())
{
nod_curent = Q.top();
Q.pop();
InQueue[nod_curent] = false;
for(unsigned int i = 0; i < G[nod_curent].size(); i++)
{
t = G[nod_curent][i];
if(D[t.nr] > t.c + D[nod_curent])
{
D[t.nr] = t.c + D[nod_curent];
if(!InQueue[t.nr])
{
Q.push(t.nr);
InQueue[t.nr] = true;
}
}
}
}
for(int i = 2; i <= n; i++)
{
if(D[i] != INF)
fout << D[i] << " ";
else
fout << "0 ";
}
return 0;
}