Cod sursa(job #1786571)

Utilizator enescu_rEnescu Radu enescu_r Data 23 octombrie 2016 12:24:55
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;
#define NMAX 50005
#define INF 2000000000
int N, M, i, x, y, c;
int D[NMAX];
vector <pair <int, int > > G[NMAX];
vector <pair <int, int > >::iterator it;
struct comp
{
    bool operator () (const int &x, const int &y)
    {
        return D[x] > D[y];
    }
};
priority_queue <int, vector <int>, comp> Q;

void Dijsktra ( int x)
{
    memset(D, -1, NMAX);
    D[x] = 0;
    Q.push(x);
    while (!Q.empty())
    {
        int y = Q.top();
        Q.pop();
        for (it = G[y].begin(); it != G[y].end(); ++it)
            if (D[(*it).first] == -1 || D[(*it).first] > D[y] + (*it).second)
        {
            D[(*it).first] = D[y] + (*it).second;
            Q.push((*it).first);
        }
    }
}

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    scanf("%d%d\n", &N, &M);
    for (i=1;i <= M; i++)
    {
        scanf("%d%d%d", &x, &y, &c);
        G[x].push_back(make_pair(y,c));
    }
    Dijsktra(1);
    for (i = 2; i <= N; i++)
        if (D[i] != -1 )
        printf("%d ", D[i]);
        else
            printf("0 ");
    return 0;
}