Cod sursa(job #1192420)

Utilizator Daniel30daniel Daniel30 Data 28 mai 2014 22:54:01
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
 
#define inf 5000000
#define Mmax 50001
#define F(i, EXP) for(register int i=0;(EXP);++i)
#define FU(i,EXP) for(unsigned int i=0;(EXP);++i)
 
struct punct{int x,c;};
vector< punct > a[Mmax];
vector<int > d(Mmax,inf) ;
queue<int> q;
 
int n,m,x,y,z,nod,cost,aux;
void dijkstra()
{q.push(1);
 d[1]=0;
 while(!q.empty())
    {aux=q.front();q.pop();
     FU(i,i<a[aux].size())
        {cost=a[aux][i].c; nod=a[aux][i].x;
         if(d[nod]>d[aux]+cost) {d[nod]=d[aux]+cost; q.push(nod);}
        }
    }
}
int main()
{freopen("dijkstra.in","rt",stdin);
 freopen("dijkstra.out","wt",stdout);
 scanf("%d%d",&n,&m);
 punct aux1;
 F(i,i<m) scanf("%d%d%d",&x,&y,&z), aux1.x=y, aux1.c=z, a[x].push_back(aux1);
 dijkstra();
 F(i,i<n-1) if(d[i+2]!=inf) printf("%d ",d[i+2]); else printf("0 ");
 printf("\n");
 return 0;
}