Cod sursa(job #1408914)

Utilizator assa98Andrei Stanciu assa98 Data 30 martie 2015 12:25:07
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>

#define pe pair<int, int>
#define mp make_pair
#define fi first
#define se second

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int MAX_N = 50100;
const int INF = 1000000000;

class cmp {
public:
    inline bool operator() (const pe &a, const pe &b) {
        return a.fi > b.fi;
    }
};

priority_queue<pe, vector<pe>, cmp> Q;

int d[MAX_N];
bool viz[MAX_N];
int n;

vector<pe> A[MAX_N];

void dijkstra(int s) {
    for(int i = 1; i <= n; i++) {
        d[i] = INF;
        viz[i] = false;
    }

    d[s] = 0;
    Q.push(mp(0, s));
    
    while(!Q.empty()) {
        int nod = Q.top().se;
        Q.pop();
        if(viz[nod]) {
            continue;
        }
        viz[nod] = true;
        for(auto it : A[nod]) {
            if(d[nod] + it.fi < d[it.se]) {
                d[it.se] = d[nod] + it.fi;
                Q.push(mp(d[it.se], it.se));
            }
        }
    }
}

int main() {
    int m;
    fin >> n >> m;
    for(int i = 1; i <= m; i++) {
        int a, b, c;
        fin >> a >> b >> c;
        A[a].push_back(mp(c, b));
        A[b].push_back(mp(c, a));
    }

    dijkstra(1);

    for(int i = 2; i <= n; i++) {
        fout << d[i] << ' ';
    }

    return 0;
}