Cod sursa(job #1536342)

Utilizator binicBinica Nicolae binic Data 25 noiembrie 2015 23:43:48
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<cstdio>
#include<queue>
#include<vector>

#define pb push_back
#define mp make_pair
#define inf (1<<30)

using namespace std;

int n,m,i,x,y,cost,ras[50004];
priority_queue< pair< int, int > > heap;
pair < int, int> X;
vector< pair < int, int > > muchie[50004];
vector< pair < int, int > >::iterator it;

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (i=1; i<=m; i++)
    {
        scanf("%d %d %d",&x,&y,&cost);
        muchie[x]. pb ( mp( y, cost) );
    }

    for (i=2; i<=n; i++)
        ras[i]=inf;
    ras[1]=0;

    heap.push ( mp (0, 1) );
    while (!heap.empty())
    {
        X = heap.top();
        heap.pop();

        if ( ras[X.second] != -X.first) continue;

        for (it=muchie[X.second].begin(); it!=muchie[X.second].end(); it++)
            if ( ras[X.second] + it->second < ras[it->first])
            {
                ras[it->first] =  ras[X.second] + it->second ;
                heap.push ( mp ( -(ras[X.second] + it->second), it->first) );
            }
    }

    for(i=2;i<=n;i++)
    {
        if(ras[i]==inf)ras[i]=0;
        printf("%d ",ras[i]);
    }
    return 0;
}