Pagini recente » Cod sursa (job #157301) | Solutii Autumn Warmup, Runda 2 | Cod sursa (job #1786150) | Cod sursa (job #512157) | Cod sursa (job #2923537)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
using PII = pair < int, int >;
const int NMAX = 1e5 + 3;
vector < PII > G[NMAX];
priority_queue < PII, vector < PII >, greater < PII > > H;
int d[NMAX];
bool sel[NMAX];
int N, M;
void dijkstra(int first)
{
int node = first;
while(node) {
sel[node] = true;
for(auto it: G[node])
if(!sel[it.second])
H.push({d[node] + it.first, it.second});
PII Next = {0, 0};
while(!H.empty() && sel[H.top().second])
H.pop();
if(!H.empty())
Next = H.top();
d[Next.second] = Next.first;
node = Next.second;
}
}
int main()
{
fin >> N >> M;
for(int i = 1; i <= M; ++i) {
int x, y, g;
fin >> x >> y >> g;
G[x].push_back({g, y});
G[y].push_back({g, x});
}
dijkstra(1);
for(int i = 2; i <= N; ++i)
fout << d[i] << ' ';
return 0;
}