Pagini recente » Cod sursa (job #2541163) | Cod sursa (job #1085566) | Cod sursa (job #1803710) | Cod sursa (job #851973) | Cod sursa (job #3285810)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
const int INF=2000000001;
struct muchie
{
int y,c;
};
struct cmp
{
bool operator()(const muchie &a, const muchie &b)
{
return a.c>b.c;
}
};
int n,m;
int dist[50001],viz[50001];
vector <muchie>lista[50001];
priority_queue <muchie,vector<muchie>,cmp>pq;
void dijkstra(int nod)
{
dist[nod]=0;
pq.push({nod,0});
while(!pq.empty())
{
muchie nod=pq.top();
pq.pop();
if(viz[nod.y]==0)
{for(auto urm:lista[nod.y])
{
if(dist[urm.y]>dist[nod.y]+urm.c)
{
dist[urm.y]=dist[nod.y]+urm.c;
pq.push({urm.y,dist[nod.y]+urm.c});
}
}
viz[nod.y]=1;
}
}
}
int main()
{
int i,x,y,c;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>x>>y>>c;
lista[x].push_back({y,c});
}
for(i=1;i<=n;i++)
dist[i]=INF;
dijkstra(1);
for(i=2;i<=n;i++)
{
if(dist[i]==INF)
cout<<0<<" ";
else cout<<dist[i]<<" ";
}
return 0;
}