Pagini recente » Cod sursa (job #3222420) | Cod sursa (job #1204364) | Cod sursa (job #1705197) | Cod sursa (job #2183421) | Cod sursa (job #3265572)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct ComparePairs
{
bool operator()(const pair<int, int> &p1, const pair<int, int> &p2)
{
return p1.second > p2.second;
}
};
int main()
{
int n, m;
f >> n >> m;
vector<vector<pair<int, int>>> adj(n + 1); // Lista de adiacență
vector<int> d(n + 1, INT_MAX);
d[1] = 0;
vector<int> tata(n + 1, 0);
int x, y, c;
for (int i = 1; i <= m; i++)
{
f >> x >> y >> c;
adj[x].push_back(make_pair(y, c));
}
priority_queue<pair<int, int>, vector<pair<int, int>>, ComparePairs> pq;
for (int i = 1; i <= n; i++)
{
pq.push({i, d[i]});
}
vector<bool> viz(n + 1, false);
while (!pq.empty())
{
auto u = pq.top();
pq.pop();
if (viz[u.first])
continue;
viz[u.first] = true;
for (auto &v : adj[u.first])
{
if (d[u.first] + v.second < d[v.first])
{
d[v.first] = d[u.first] + v.second;
v.second = d[v.first];
tata[v.first] = u.first;
pq.push(v);
}
}
}
for (int i = 2; i <= n; i++)
{
g << d[i] << ' ';
}
return 0;
}