Pagini recente » Cod sursa (job #264232) | Cod sursa (job #392444) | Cod sursa (job #2540901) | Cod sursa (job #1955670) | Cod sursa (job #2372531)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <limits.h>
#define MAXN 50010
#define MAXM 250010
#define INF 1<<30
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n, m, d[MAXN], ap[MAXN];
struct Vecini {
int vec, cost;
bool operator < (const Vecini& other) const {
return cost<other.cost;
}
};
struct Distante {
int to,cost;
bool operator < (const Distante& other) const {
return cost<other.cost;
}
};
vector <Vecini> graph[MAXN];
priority_queue <Distante> q;
void dj (int nod)
{
Distante aux;
aux.to=nod;
aux.cost=0;
q.push(aux);
while (!q.empty())
{
nod = q.top().to;
q.pop();
if (ap[nod])
continue;
else
ap[nod]=1;
for (int i=0;i<graph[nod].size();i++)
{
if (d[graph[nod][i].vec]>d[nod]+graph[nod][i].cost)
{
d[graph[nod][i].vec]=d[nod]+graph[nod][i].cost;
q.push({graph[nod][i].vec, d[graph[nod][i].vec]});
}
}
}
}
int main()
{
fin>>n>>m;
for (int i=0;i<m;i++)
{
int x,y,c;
fin>>x>>y>>c;
graph[x].push_back({y,c});
}
for (int i=1;i<=n;i++)
d[i]=INF;
d[1]=0;
dj(1);
for (int i=2;i<=n;i++)
{
if (d[i]!=INF)
fout<<d[i]<<" ";
else
fout<<"0 ";
}
return 0;
}