Cod sursa(job #2940708)

Utilizator Nicolae11Mihaila Nicolae Nicolae11 Data 16 noiembrie 2022 10:55:06
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,costuri[50005];
priority_queue <pair<int,int>, vector<pair<int, int>>, greater<pair<int, int>>> q; ///Priority Queue ne da Heap-ul de care avem nevoie pentru
///a nu fi nevoiti sa sortam muchiile (se face intern). Primul parametru e tipul de elemente folosit, al doilea e vector<tipul elementelor folosite>
///iar al treilea este OPTIONAL si in cazul nostru este pentru a sorta crescator. Intern e MAX HEAP, dar asa l-am facut MIN HEAP
vector <vector<pair<int,int>>> liste; ///listele noastre de adiacenta
int main()
{
    f>>n>>m;
    liste.resize(n+1); ///Ii dam dimensiunea corecta lui liste
    for(int i=1;i<=m;i++)
    {   int x,y,cost;
        f>>x>>y>>cost;
        liste[x].push_back({cost,y}); ///{ceva1,ceva2} face o pereche automat. La noi face pair din {cost,y}
    }
    q.push({0,1});
    costuri[1]=0;
    for(int i=2;i<=n;i++)
        costuri[i]=INT_MAX;
    while(!q.empty())
    {
        pair <int, int> curent = q.top();
        q.pop();
        for (auto muchie: liste[curent.second])
        {   if(curent.first+muchie.first<costuri[muchie.second])
            {
                costuri[muchie.second] = curent.first + muchie.first;
                q.push({costuri[muchie.second],muchie.second}); ///Adaugam in priority queue elementul la care avem muchie
            }
        }
    }
    for(int i=2;i<=n;i++)
        g<<costuri[i]<<' ';
    return 0;
}