Cod sursa(job #2647725)

Utilizator AdelaCorbeanuAdela Corbeanu AdelaCorbeanu Data 6 septembrie 2020 00:00:38
Problema Algoritmul lui Dijkstra Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define INF 100000000000

priority_queue<int>q;

vector<pair<int,int> >v[25010];

long long n, m, d[25010], a, b, c;
bool inCoada[25010];

void dijkstra (int nodStart) {
      for (int i=2;i<=n;i++) d[i] = INF;
      d[nodStart] = 0; inCoada[nodStart] = 1;
      q.push(nodStart);
      while (!q.empty()) {
           int nodCurent = q.top();
           q.pop();
           inCoada[nodCurent] = 0;
           for (int i=0;i<v[nodCurent].size();i++) {
               int vecin = v[nodCurent][i].first;
               int cost = v[nodCurent][i].second;
               if (d[nodCurent]+cost<d[vecin]) {
                   d[vecin] = d[nodCurent]+cost;
                   if (inCoada[vecin]==0) {
                       q.push(vecin);
                       inCoada[vecin] = 1;
                   }
               }
           }
      }
}
int main()
{
    fin >> n >> m;
    for (int i=1;i<=m;i++) {
        fin >> a >> b >> c;
        v[a].push_back(make_pair(b,c));
    }
    dijkstra(1);
    for (int i=2;i<=n;i++) {
        if (d[i]==INF) fout << 0 << " ";
        else fout << d[i] << " ";
    }
    return 0;
}