Pagini recente » Cod sursa (job #2705527) | Cod sursa (job #564275) | Cod sursa (job #1939456) | Cod sursa (job #2505427) | Cod sursa (job #1923073)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define MAX_VALUE 999999999
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector <vector <pair <int, int> > > a;
vector <int> d;
struct comp {
bool operator() (pair <int, int> &a, pair <int, int> &b) {
return a.second > b.second;
}
};
priority_queue <pair <int, int>, vector < pair <int, int> >, comp> pq;
int n, m, x, y, z, R;
int main()
{
fin>>n>>m;
a.resize(n + 1);
for(int i = 1; i <= m; i++) {
fin>>x>>y>>z;
a[x].push_back(make_pair(y, z));
}
d.resize(n + 1, MAX_VALUE);
R = 1;
d[R] = 0;
pq.push(make_pair(R, 0));
while(!pq.empty()) {
pair <int, int> k;
k = pq.top();
pq.pop();
if(k.second > d[k.first])
continue;
for (int i = 0; i < a[k.first].size(); i++) {
if(k.second + a[k.first][i].second < d[a[k.first][i].first]) {
d[a[k.first][i].first] = k.second + a[k.first][i].second;
pq.push(make_pair(a[k.first][i].first, d[a[k.first][i].first]));
}
}
}
for(int i = 2; i <= n; i++) {
if(d[i] == MAX_VALUE) {
fout<<"0 ";
} else {
fout<<d[i]<<' ';
}
}
fin.close();
fout.close();
return 0;
}