Pagini recente » Cod sursa (job #1712840) | Cod sursa (job #1552849) | Cod sursa (job #869747) | Istoria paginii utilizator/parket | Cod sursa (job #2026032)
#include <fstream>
#include <vector>
#include <queue>
#include <limits.h>
#define pii pair<int, int>
#define mk make_pair
#define f first
#define s second
#define MAX 100005
using namespace std;
struct comp {
bool operator() (pii a, pii b) {
return a.f > b.f;
}
};
int n, m, d[MAX];
int a, b, c;
bool viz[MAX];
vector<pii> l[MAX];
void dijkstra() {
priority_queue<pii, vector<pii>, comp> q;
for(int i = 1; i <= n; ++i)
d[i] = INT_MAX;
d[1] = 0;
q.push(mk(d[1], 1));
while(!q.empty()) {
int node = q.top().s;
q.pop();
if(node == n)
return;
if(viz[node])
continue;
viz[node] = 1;
for(int i = 0; i < l[node].size(); ++i)
if(d[l[node][i].f] > d[node] + l[node][i].s) {
d[l[node][i].f] = d[node] + l[node][i].s;
q.push(mk(d[l[node][i].f], l[node][i].f));
}
}
}
int main() {
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
f >> n >> m;
for(int i = 0; i < m; ++i) {
f >> a >> b >> c;
l[a].push_back(mk(b, c));
}
dijkstra();
for(int i = 2; i <= n; ++i)
g << ((d[i] == INT_MAX) ? 0 : d[i]) << " ";
return 0;
}