Cod sursa(job #1379882)

Utilizator Eduard6421Eduard Gabriel Eduard6421 Data 6 martie 2015 20:00:52
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<cstdio>
#include<vector>
#include<queue>

#define INF 0x3f3f3f3f
#define NMAX 50005
using namespace std;



vector < pair <int,int>  > v[NMAX];

priority_queue < pair <int, int> > q;




int d[NMAX];




int main()
{

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



    int n,m;
    int nod1,nod2,cost;
    int i,sze,fiu,c1,c2;

    scanf("%d%d",&n,&m);

    for(i=1; i<=m; ++i)
    {

        scanf("%d%d%d",&nod1,&nod2,&cost);
        v[nod1].push_back(make_pair(cost,nod2));

    }


    for(i=2; i<=n; ++i)
        d[i]=INF;


    pair <int,int > temp;

    temp.second=1;
    temp.first=0;

    q.push(temp);


    while(!q.empty())
    {

        temp=q.top();
        q.pop();

        sze=v[temp.second].size();

        c1=-temp.first;
        nod1=temp.second;

        for(i=0; i<sze; ++i)
        {

            fiu=v[temp.second][i].second;

            c2=c1+v[temp.second][i].first;

            if(d[fiu]>c2)
            {
                d[fiu]=c2;
                q.push(make_pair(-c2,fiu));

            }

        }


    }


    for(int i = 2; i <= n; i++)
    {
        if(d[i] == INF)
            printf("0 ");
        else
            printf("%d ",d[i]);
    }



    return 0;


}