Pagini recente » Cod sursa (job #1515638) | Cod sursa (job #2712743) | Cod sursa (job #956271) | Cod sursa (job #1493544) | Cod sursa (job #2702983)
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");//dijkstra
ofstream fout("dijkstra.out");
#define N 50001
#define M 250001
#define ll long long
struct muchie
{
int el;
long long int distanta;
muchie(int el, long long int distanta)
: el(el), distanta(distanta)
{
}
};
struct comp
{
bool operator()(muchie const& p1, muchie const& p2)
{
return p1.distanta > p2.distanta;
}
};
struct nod {
int d;
long long int cost;
};
priority_queue<muchie, vector<muchie>, comp> coada;
vector<vector<nod> > liste(N, vector<nod>());
vector<ll> distanta(N, 1ll << 62);
int main() {
ll n, m, a, b, c, i;
fin >> n >> m;
distanta[1] = 0;
muchie p(1, 0);
for (i = 0; i < m; i++) {
fin >> a >> b >> c;
liste[a].push_back({ b ,c });
liste[b].push_back({ a ,c });
}
coada.push(p);
while (!coada.empty()) {
muchie top = coada.top();
for (i = 0; i < liste[top.el].size(); i++)
if (distanta[liste[top.el][i].d] > distanta[top.el] + liste[top.el][i].cost)
{
distanta[liste[top.el][i].d] = distanta[top.el] + liste[top.el][i].cost;
muchie x(liste[top.el][i].d, distanta[liste[top.el][i].d]);
coada.push(x);
}
coada.pop();
}
for (int i = 2; i <= n; ++i) {
if (distanta[i] == 1ll << 62) {
distanta[i] = 0;
}
fout << distanta[i] << ' ';
}
fout << '\n';
}