Pagini recente » Cod sursa (job #1876576) | Cod sursa (job #343879) | Cod sursa (job #1535484) | Cod sursa (job #668827) | Cod sursa (job #2328731)
#include <bits/stdc++.h>
#define NMAX 50000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,v,a,b,c;
struct graf
{
long long vecin;
long long c;
};
struct cost
{
long long varf;
long long dist;
bool operator<(const cost &other) const{
return this->dist >other.dist;
}
};
vector <graf> lista[NMAX];
priority_queue <cost> pq;
int d[NMAX];
int main()
{
fin>>n>>m;
for(int i=1;i<=m;++i)
{
fin>>a>>b>>c;
graf var;
var.vecin=b;
var.c=c;
lista[a].push_back(var);
}
for(int i=1;i<=n;++i)
{
if(i==1)
d[i]=0;
else
d[i]=-1;
}
cost var;
var.varf=1;
var.dist=0;
pq.push(var);
while(pq.size()!=0)
{
cost var=pq.top();
int v=var.varf;
int c=var.dist;
for(auto x:lista[v])
{
if(d[x.vecin]==-1 || (d[x.vecin]!=-1 && d[x.vecin]>d[v]+x.c))
{
d[x.vecin]=d[v]+x.c;
cost adaugare;
adaugare.varf=x.vecin;
adaugare.dist=d[v]+x.c;
pq.push(adaugare);
}
}
pq.pop();
}
for(int i=2;i<=n;++i)
{
if(d[i]==-1)
d[i]=0;
fout<<d[i]<<" ";
}
return 0;
}