Cod sursa(job #2202040)

Utilizator jack92657Jacky boy jack92657 Data 7 mai 2018 11:14:29
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

struct elem{
    int y, val;
    bool operator<(const elem &obj)const{
        return val < obj.val;
    }
};

int n, m, d[50005];
vector< pair<int, int> > v[50005];
priority_queue<elem> q;

int main()
{
    ifstream fin ("dijkstra.in");
    ofstream fout ("dijkstra.out");
    fin >> n >> m;
    for (int i = 0; i < 50005; ++i)
        d[i] = 2000000000;
    while(m--){
        int y1, y2, z;
        fin >> y1 >> y2 >> z;
        v[y1].push_back(make_pair(y2, z));
        v[y2].push_back(make_pair(y1, z));
    }
    elem begn;
    begn.y = 1;
    begn.val = 0;
    q.push(begn);
    while(!q.empty()){
        elem k = q.top();
        q.pop();
        for (int i = 0; i < v[k.y].size(); ++i)
            if(k.val+v[k.y][i].second < d[v[k.y][i].first]){
                d[v[k.y][i].first] = k.val+v[k.y][i].second;
                elem el;
                el.y = v[k.y][i].first;
                el.val = d[v[k.y][i].first];
                q.push(el);
            }
    }
    for (int i = 2; i <= n; ++i)
        fout << (d[i] == 2000000000 ? 0 : d[i]) << " ";
    return 0;
}