Pagini recente » Cod sursa (job #1799376) | Arhiva de probleme | Cod sursa (job #2009700) | Cod sursa (job #2357714) | Cod sursa (job #3263208)
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#include <fstream>
using namespace std;
///1 -> celelalte
vector<vector<pair<int,long long>>>tabel;
vector<bool>viz;
vector<long long>mini;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
void d(int nod) {
priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> q;
q.push({0, nod});
mini[nod] = 0;
while (!q.empty()) {
auto current = q.top();
q.pop();
int currentNode = current.second;
if (viz[currentNode]) continue;
viz[currentNode] = true;
for (auto& i : tabel[currentNode]) {
int vec = i.first;
long long newDist = mini[currentNode] + i.second;
if (newDist < mini[vec] && !viz[vec]) {
mini[vec] = newDist;
q.push({mini[vec], vec});
}
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m;
fin>>n>>m;
tabel.resize(n+1);
viz.resize(n+1);
mini.resize(n+1,LLONG_MAX);
for(int i=1;i<=m;i++){
int x,y,z;
fin>>x>>y>>z;
tabel[x].push_back({y,z});
}
d(1);
for(int i=2;i<=n;i++)
fout<<mini[i]<<" ";
return 0;
}