Pagini recente » Cod sursa (job #466990) | Cod sursa (job #612507) | Cod sursa (job #2387266) | Cod sursa (job #1659785) | Cod sursa (job #1760835)
#include <iostream>
#include<stdio.h>
#include<vector>
#include<set>
#define nmax 50005
#define inf -1
using namespace std;
struct element{int n, c;};
int n, m, a, dmin[nmax], x, dist;
vector <element> ma[nmax];
vector <element> ::iterator it;
element el;
set <pair<int,int> > h;
pair <int, int> pr;
void citire(){
scanf("%d %d",&n,&m);
for (int i=1;i<=m;i++){
scanf("%d %d %d",&a,&el.n,&el.c);
ma[a].push_back(el);
}
}
void rezolvare(){
for (int i=2;i<=n;i++)
dmin[i]=inf;
dmin[1]=0;
h.insert(make_pair(0,1));
while (h.size()){
pr=*h.begin();
h.erase(h.begin());
x=pr.second; dist=pr.first;
for (it=ma[x].begin();it!=ma[x].end();it++)
if ((dmin[(*it).n]>dist+(*it).c)||(dmin[(*it).n]==inf)){
h.erase(make_pair(dmin[(*it).n],(*it).n));
dmin[(*it).n]=dist+(*it).c;
h.insert(make_pair(dmin[(*it).n],(*it).n));
}
}
for (int i=2;i<=n;i++)
if (dmin[i]==inf)
printf("0 ");
else
printf("%d ",dmin[i]);
printf("\n");
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
citire();
rezolvare();
return 0;
}