Pagini recente » Cod sursa (job #1704765) | Cod sursa (job #1566203) | Cod sursa (job #2458281) | Cod sursa (job #773543) | Cod sursa (job #2640967)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,i,x,y,val,minim[50005],nod,nr,sel[50005],cost;
vector <pair <int,int> > v[50005];
priority_queue <pair <int,int> , vector <pair<int,int> > ,greater <pair <int,int> > > h;
int main()
{
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>val;
v[x].push_back({y,val});
}
for (i=1;i<=n;i++)
{
minim[i]=-1;
}
minim[1]=0;
sel[1]=1;
for (i=0;i<v[1].size();i++)
{
nod=v[1][i].first;
minim[nod]=v[1][i].second;
h.push({minim[nod],nod});
nr++;
}
while (nr)
{
while (sel[h.top().second]==1)
{
h.pop();
}
nod=h.top().second;
sel[nod]=1;
cost=h.top().first;
h.pop();
nr--;
for (i=0;i<v[nod].size();i++)
{
int nod1=v[nod][i].first;
if (minim[nod1]==-1)
{
minim[nod1]=cost+v[nod][i].second;
nr++;
h.push({minim[nod1],nod1});
}
else
if (minim[nod1]>cost+v[nod][i].first)
{
minim[nod1]=cost+v[nod][i].first;
h.push({minim[nod1],nod1});
}
}
}
for (i=2;i<=n;i++)
{
if (minim[i]==-1)
{
minim[i]=0;
}
g<<minim[i]<<" ";
}
return 0;
}