Pagini recente » Cod sursa (job #1431122) | Cod sursa (job #1355565) | Cod sursa (job #2089030) | Cod sursa (job #2282656) | Cod sursa (job #2032563)
#include <iostream>
#include <queue>
#include <fstream>
#include <utility>
#include <stdlib.h>
#define INFILE "dijkstra.in"
#define OUTFILE "dijkstra.out"
using namespace std;
typedef pair<int,int> mPair;
ifstream in(INFILE);
ofstream out(OUTFILE);
const int NMAX=50010;
const int INF=30000;
priority_queue<mPair,vector<mPair>,greater<mPair>> q;
int dist[NMAX];
struct leg{
int nod;
int val;
};
leg*A[NMAX];
bool viz[NMAX];
int N,M;
int start=1;
void Read(){
in>>N>>M;
for(int i=1;i<=N;i++){
A[i]=(leg*)realloc(A[i],sizeof(leg));
A[i][0].nod=0;
}
int x,y,c;
while(in>>x>>y>>c){
//cout<<x<<y<<c<<endl;
A[x][0].nod++;
A[x]=(leg*)realloc(A[x],(A[x][0].nod+1)*sizeof(leg));
A[x][A[x][0].nod].nod=y;
A[x][A[x][0].nod].val=c;
}
for(int i=1;i<=N;i++){
dist[i]=INF;
}
dist[start]=0;
}
void Dijkstra(){
q.push(make_pair(dist[start],start));
while(!q.empty()){
int x=q.top().second;
//cout<<dist[x]<<endl;
viz[x]=true;
q.pop();
for(int i=1;i<=A[x][0].nod;i++){
int v=A[x][i].nod;
int w=A[x][i].val;
if(dist[v]>dist[x]+w&&!viz[v]){
dist[v]=dist[x]+w;
q.push(make_pair(dist[v],v));
}
}
}
}
void Afisare(){
for(int i=2;i<=N;i++){
if(dist[i]==INF)
out<<0<<' ';
else
out<<dist[i]<<" ";
}
}
int main()
{
Read();
Dijkstra();
Afisare();
return 0;
}