Pagini recente » Cod sursa (job #2901861) | Cod sursa (job #1616117) | Cod sursa (job #1575435) | Cod sursa (job #43048) | Cod sursa (job #2940708)
#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;
}