Pagini recente » Cod sursa (job #723869) | Cod sursa (job #2213830) | Cod sursa (job #2826785) | Cod sursa (job #1684717) | Cod sursa (job #2514518)
#include <fstream>
#include <queue>
#include <bitset>
#define Nod second
#define Val first
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n,m;
pair <int,int> vf[250001];
int urm[250001],last[50001],nr;
priority_queue <pair<int,int>> coada;
int costMin[50001];
bitset <50001> viz;
void adauga(int from,int to,int cost)
{
vf[++nr].Nod=to;
vf[nr].Val=cost;
urm[nr]=last[from];
last[from]=nr;
}
void bfs(int start)
{
coada.push({0,start});
while(!coada.empty())
{
while(!coada.empty() && viz[ coada.top().Nod ]==1)
coada.pop();
if(coada.empty())
break;
int nod=coada.top().Nod,cost=-coada.top().Val;
coada.pop();
costMin[nod]=cost;
viz[nod]=1;
for(int k=last[nod];k;k=urm[k])
if(viz[ vf[k].Nod ]==0)
coada.push({-vf[k].Val-cost,vf[k].Nod});
}
}
int main()
{
cin>>n>>m;
for(int i,j,cost,k=1;k<=m;k++)
{
cin>>i>>j>>cost;
adauga(i,j,cost);
}
bfs(1);
for(int i=2;i<=n;i++)
cout<<costMin[i]<<' ';
return 0;
}