Cod sursa(job #1712356)

Utilizator phelisusPhelisus phelisus Data 2 iunie 2016 18:51:17
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <queue>
int inf = 1<<29;
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,a,b,c;
vector<pair<int,int> > date[50001];
int distante[50001];

typedef struct comp{
    bool operator()(const pair<int,int> &a,const pair<int,int> &b){
    return a.second > b.second;}
}comp;

void citire(void){
    f>>n>>m;
    for(int i=1;i<=m;i++){
        f>>a>>b>>c;
        date[a].push_back(make_pair(b,c));}
}
void dijkstra(void){
    priority_queue<pair<int,int>, vector<pair<int,int> >, comp> pq;
    for(int i=2;i<=n;i++)
        distante[i] = inf;
    distante[1]=0;
    pq.push(make_pair(1,0));
    while(!pq.empty()){
        int c=pq.top().first;
        pq.pop();
        for(unsigned int i=0;i<date[c].size();i++)
            if(distante[date[c][i].first] > date[c][i].second + distante[c]){
                distante[date[c][i].first] = date[c][i].second + distante[c];
                pq.push(date[c][i]);
                }
        }
    for(int i=2;i<=n;i++)
    {
        if(distante[i] == inf)
            g<<"0 ";
        else
            g<<distante[i]<<' ';
    }
}
int main()
{
    citire();
    dijkstra();
    cout<<"Finished";
    return 0;
}