Cod sursa(job #2134507)

Utilizator edynator34Nechitoaia George-Edward edynator34 Data 18 februarie 2018 00:03:39
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <queue>
#include <fstream>
#include <vector>
#include <bitset>
#define inf (1<<30)
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector <pair <int , int > > A[50005];
bitset <50005> v;
int d[50005];
int n,m,x,y,c,i,j;

struct compara{

    bool operator()(int x, int y){
        return d[x]>d[y];
    }
};


priority_queue < int, vector < int> ,compara> q;
void Dijkstra(){
    for(i=2;i<=n;++i){
        d[i]=inf;
    }
    d[1]=0;
    v[1]=true;
    q.push(1);
    vector < pair<int,int> > ::iterator it;
    while(!q.empty()){
        int nod=q.top();
        q.pop();
        v[nod]==false;

        for(it=A[nod].begin() ; it!=A[nod].end() ; ++it)
        {
            int vecin=it->first;
            int cost=it->second;
            if(d[vecin]>d[nod]+cost){
                d[vecin]=d[nod]+cost;
                if(v[vecin]==false){
                    v[vecin]=true;
                    q.push(vecin);
                }
            }
        }
    }
}

int main()
{
    in>>n>>m;
    for(i=1;i<=m;++i){
            in>>x>>y>>c;
            A[x].push_back(make_pair(y,c));
    }
    Dijkstra();
    for(i=2;i<=n;++i){
            if(d[i]!=inf) out<<d[i]<<' ';
            else out<<0<<' ';
    }
    return 0;
}