Pagini recente » Cod sursa (job #2758948) | Cod sursa (job #2255324) | Cod sursa (job #3219627) | Cod sursa (job #2172415) | Cod sursa (job #3145529)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");
vector < pair <int , int> > adiacenta[50001];
long long distanta[50001];
bool adaugat[50001];
int main ()
{
int noduri , arce;
cin >> noduri >> arce;
for (int indice = 1 , nod[2] , cost ; indice <= arce ; indice++)
{ cin >> nod[0] >> nod[1] >> cost; adiacenta[nod[0]].emplace_back(make_pair(nod[1] , cost)); }
for (int indice = 2 ; indice <= noduri ; indice++)
distanta[indice] = 1e9;
priority_queue < pair <int , int> > optiuni;
optiuni.push(make_pair(0 , 1));
while (!optiuni.empty())
{
const int nod_actual = optiuni.top().second; optiuni.pop();
for (auto nod_vecin : adiacenta[nod_actual])
if (distanta[nod_actual] + nod_vecin.second < distanta[nod_vecin.first])
{
distanta[nod_vecin.first] = distanta[nod_actual] + nod_vecin.second;
if (!adaugat[nod_vecin.first]) {
optiuni.push(make_pair(-distanta[nod_vecin.first] , nod_vecin.first));
adaugat[nod_vecin.first] = true;
}
}
adaugat[nod_actual] = false;
}
for (int indice = 2 ; indice <= noduri ; indice++)
cout << (distanta[indice] == 1e9 ? 0 : distanta[indice]) << ' ';
cout.close(); cin.close();
return 0;
}