Cod sursa(job #976184)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 22 iulie 2013 18:15:04
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>
#include<vector>
#include<iterator>
#include<utility>
#define NMAX 50000+5
#define oo 1<<30
using namespace std;
int N,M,a,b,c,i,j;
int D[NMAX];
bool viz[NMAX];
vector<pair<int,int> > V[NMAX];
vector<pair<int,int> >::iterator it;
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&N,&M);
    for(;M;--M)
    {
        scanf("%d%d%d",&a,&b,&c);
        V[a].push_back(make_pair(b,c));
    }
    for(i=2;i<=N;i++) D[i]=oo;
    for(it=V[1].begin();it!=V[1].end();it++) D[it->first]=it->second;
    viz[1]=1;
    for(i=1;i<=N-1;i++)
    {
        c=oo; a=oo;
        for(j=1;j<=N;j++) if(!viz[j] && D[j]<c) {c=D[j]; a=j;}
        viz[a]=1;
        for(it=V[a].begin();it!=V[a].end();it++)
            if(D[a]+it->second < D[it->first]) D[it->first]=D[a]+it->second;
    }
    for(i=2;i<=N;i++) printf("%d ",D[i]);
    return 0;
}