Pagini recente » Cod sursa (job #3257952) | Cod sursa (job #933184) | Monitorul de evaluare | Cod sursa (job #825462) | Cod sursa (job #3256803)
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;
ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");
int n,m,r[50100],P[50100],node,p,val;
struct edge
{
int x,y,val;
}v[250100];
bool ord (edge a,edge b)
{
return a.x<b.x;
}
int main()
{
cin>>n>>m;
for (int i=1; i<=m; i++)
cin>>v[i].x>>v[i].y>>v[i].val;
sort (v+1,v+m+1,ord);
for (int i=1; i<=m; i++)
if (!P[v[i].x]) P[v[i].x]=i;
priority_queue<pair<int,int>>Q;
for (int i=2; i<=n; i++) r[i]=2000000000;
Q.push(make_pair(0,1));
while (!Q.empty())
{
val=Q.top().first;
node=Q.top().second;
Q.pop();
if (val==r[node])
{
p=P[node];
while (v[p].x==node)
{
r[v[p].y]=min(r[v[p].y],r[node]+v[p].val);
Q.push(make_pair(r[v[p].y],v[p].y));
p++;
}
}
}
for (int i=2; i<=n; i++)
if (r[i]!=2000000000) cout<<r[i]<<" ";
else cout<<0<<" ";
return 0;
}