Pagini recente » Cod sursa (job #2694579) | Cod sursa (job #2300949) | Cod sursa (job #418868) | Cod sursa (job #937897) | Cod sursa (job #2824064)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct heapNode{
int nod, dist;
inline bool operator < (const heapNode &other) const
{
return dist > other.dist;
}
};
struct node{
int nod, cost;
};
const int maxN=50000;
int nr_noduri, nr_muchii, dist[maxN + 5];
vector <node> G[maxN+5];
priority_queue <heapNode> heap;
void citire()
{
fin>>nr_noduri>>nr_muchii;
for(int i=1; i<=nr_muchii; i++)
{
node a, b;
fin>>a.nod>>b.nod>>b.cost;
G[a.nod].push_back(b);
}
}
void dijkstra()
{
heap.push({1, 0});
while(!heap.empty())
{
heapNode curr = heap.top();
heap.pop();
if(dist[curr.nod])
continue;
for(node vecin : G[curr.nod])
{
if(dist[vecin.nod] == 0 || dist[curr.nod] + vecin.cost < dist[vecin.nod])
{
dist[vecin.nod] = dist[curr.nod] + vecin.cost;
heap.push({vecin.nod, dist[vecin.nod]});
}
}
}
}
void afisare()
{
for(int i=2; i<=nr_noduri; i++)
fout<<dist[i]<<' ';
}
int main()
{
citire();
dijkstra();
afisare();
return 0;
}