Pagini recente » Cod sursa (job #178115) | Cod sursa (job #821275) | Cod sursa (job #2999327) | Cod sursa (job #1628960) | Cod sursa (job #1364954)
#include <stdio.h>
#include <vector>
#include <set>
#include <utility>
#include <algorithm>
#define mp make_pair
#define NN 50008
#define MX 999999999;
using namespace std;
vector < pair <int,int>> a[NN];
vector < pair <int,int>>::iterator itt;
multiset <pair <int,int>> H;
multiset <pair <int,int>>::iterator it,it1;
int d[NN],pre[NN],n,m,i,x,y,z,cost,x1,r,cr;
int main()
{
freopen("dijkstra.in", "r",stdin);
freopen("dijkstra.out", "w",stdout);
scanf("%d%d",&n,&m);
for(i=2;i<=n;i++)
d[i]=MX;
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
a[x].push_back(mp(y,z));
}
H.insert(mp(0,1));
while (H.size()!=0){
it=H.begin();
cost=(*it).first;
x1=(*it).second;
/*for(it1=H.begin();it1!=H.end();++it1)
printf("%d ",(*it).first);*/
for(itt=a[x1].begin();itt!=a[x1].end();++itt){
r=(*itt).first;
cr=(*itt).second;
if (cost+cr<d[r]){d[r]=cost+cr;H.insert(mp(d[r],r));pre[r]=x1;}
}
H.erase(it);
}
for(i=2;i<=n;i++){
if (d[i]==999999999)d[i]=0;
printf("%d ",d[i]);
}
return 0;
}