Cod sursa(job #926029)

Utilizator tudgal1001Profir Tudor tudgal1001 Data 24 martie 2013 21:48:33
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#define inf 1<<30
#define NMax 50005
using namespace std;

typedef vector<int> VI;
vector<pair<int,int> > vc[NMax];
int d[NMax];

struct comp {
    bool operator () (int i, int j)
    {
        return d[i]<d[j];
    }
};
priority_queue<int, VI, comp> Q;

int main ()
{
    int n,m,i,a,b,c,nod;
    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",&a,&b,&c);
        vc[a].push_back(make_pair(b,c));
    }
    for (i=1; i<=n; i++)
        d[i]=inf;
    Q.push(1);
    d[1]=0;
    while (!Q.empty())
    {
        nod=Q.top();
        Q.pop();
        for (i=0; i<vc[nod].size(); i++)
            if (d[vc[nod][i].first]>d[nod]+vc[nod][i].second)
            {
                d[vc[nod][i].first]=d[nod]+vc[nod][i].second;
                Q.push(vc[nod][i].first);
            }
    }
    for (i=2; i<=n; i++)
        printf("%d ",(d[i]!=inf) ? d[i] : 0);
    return 0;
}