Cod sursa(job #1170038)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 12 aprilie 2014 16:40:54
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

struct cmp {
    bool operator()(pair<int,int> a,pair<int,int> b) {
        return a.second>b.second;
    }
};

priority_queue<pair<int,int>, vector< pair<int,int> >, cmp> heap;
vector< pair<int,int> > v[50005];
int n,m,i,x,y,cost,nod,d[50005];
bool ok[50005];

int main() {
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");
    f>>n>>m;
    for(i=2;i<=n;i++)
        d[i]=2000000000;
    for(i=1;i<=m;i++) {
        f>>x>>y>>cost;
        v[x].push_back(make_pair(y,cost));
    }
    heap.push(make_pair(1,0));
    while(!heap.empty()) {
        while(ok[heap.top().first] && !heap.empty())
            heap.pop();
        if(heap.empty())
            break;
        nod=heap.top().first;
        cost=heap.top().second;
        ok[nod]=1;
        d[nod]=cost;
        for(i=0;i<v[nod].size();i++)
            if(!ok[v[nod][i].first] && d[v[nod][i].first]>d[nod]+v[nod][i].second)
                heap.push(make_pair(v[nod][i].first,d[nod]+v[nod][i].second));
    }
    for(i=2;i<=n;i++)
        g<<(d[i]!=2000000000 ? d[i] : 0)<<" ";
    return 0;
}