Pagini recente » Cod sursa (job #2147061) | Cod sursa (job #2624782) | Cod sursa (job #148286) | Cod sursa (job #2162338) | Cod sursa (job #2479011)
#include <bits/stdc++.h>
#define M 50005
#define INF 1<<30
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<pair<int,int> >lista[M];
int n,m,dist[M];
bool inq[M];
struct compara{
bool operator()(int x,int y)
{
return dist[x]>dist[y];
}
};
priority_queue<int, vector<int>, compara>q;
void dijkstra(int node)
{
for(int i=1;i<=n;i++)
{
dist[i]=INF;
inq[i]=false;
}
dist[node]=0;
inq[node]=true;
q.push(node);
while(!q.empty())
{
int a=q.top();
q.pop();
inq[a]=false;
for(auto b:lista[a])
{
if(dist[a]+b.second<dist[b.first])
{
dist[b.first]=dist[a]+b.second;
if(!inq[b.first])
{
q.push(b.first);
inq[b.first]=true;
}
}
}
}
}
int main()
{
in>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,d;
in>>x>>y>>d;
lista[x].push_back({y,d});
}
dijkstra(1);
for(int i=2;i<=n;i++)
{
if(dist[i]!=INF)
out<<dist[i]<<' ';
else
out<<"0 ";
}
return 0;
}