Cod sursa(job #1708498)

Utilizator TheNechizFMI Razvan Birisan TheNechiz Data 27 mai 2016 10:46:16
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <set>
#include <vector>
#include <climits>
#define MaxN 50001
using namespace std;

int inf = INT_MAX,N,M,d[MaxN];
vector <int> G[MaxN],C[MaxN];
set< pair<int,int> > S;

void Dijkstra()
{
    int i,j,k,val,x;

    for( i = 2 ; i <= N ; ++i )
        d[i] = inf;
    S.insert( make_pair(0,1) );

    while( S.size() > 0 )
    {
        val = S.begin()->first;
        x = S.begin()->second;
        S.erase(S.begin());
        for( i = 0 ; i < G[x].size() ; i++ )
            if( d[ G[x][i] ] > val+C[x][i] )
            {
                d[ G[x][i] ] = val+C[x][i];
                S.insert(make_pair(d[G[x][i]],G[x][i]));
            }
    }
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);

    int i,a,b,c;
    scanf("%d %d\n",&N,&M);
    for( i = 1 ; i <= M ; ++i )
    {
        scanf("%d %d %d\n",&a,&b,&c);
        G[a].push_back(b);
        C[a].push_back(c);
    }

    Dijkstra();

    for( i = 2 ; i <= N ; ++i )
        printf("%d ",d[i] == inf ? 0 : d[i]);

    fclose(stdin);
    fclose(stdout);

    return 0;
}