Pagini recente » Cod sursa (job #797991) | Cod sursa (job #3130988) | Cod sursa (job #165230) | Cod sursa (job #2904001) | Cod sursa (job #2475848)
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define ARRAY_MAX 250005
int N, M;
int Dist[ARRAY_MAX];
const int upperBound = 1 << 30;
bitset < ARRAY_MAX > inQueue;
vector < pair < int, int > > Node[ARRAY_MAX];
priority_queue < int, vector < int > > Queue;
void Read() {
fin >> N >> M;
while (M--) {
int A, B, C;
fin >> A >> B >> C;
Node[A].push_back(make_pair(B, C));
}
}
void Dijkstra(int startNode) {
for (int i = 1; i <= N; i++)
Dist[i] = upperBound;
Dist[startNode] = 0;
Queue.push(startNode);
inQueue[startNode] = true;
while (!Queue.empty()) {
int currentNode = Queue.top();
Queue.pop();
inQueue[currentNode] = false;
for (auto it : Node[currentNode]) {
int Next = it.first;
int Cost = it.second;
if (Dist[Next] > Dist[currentNode] + Cost) {
Dist[Next] = Dist[currentNode] + Cost;
if (!inQueue[Next]) {
Queue.push(Next);
inQueue[Next] = true;
}
}
}
}
}
void Write() {
for (int i = 2; i <= N; i++)
fout << ((Dist[i] != upperBound) ? Dist[i] : 0) << " ";
}
int main() {
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
Read();
Dijkstra(1);
Write();
}