Pagini recente » Cod sursa (job #2657508) | Borderou de evaluare (job #481036) | Cod sursa (job #1390359) | Cod sursa (job #2437963) | Cod sursa (job #1480718)
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
#include <map>
#define MAX 100005
#define INFINITY (1 << 30)
using namespace std;
vector <int> gr[MAX];
map<pair<int, int>, int> cst;
int dmin[MAX];
void dijkstra(int v[MAX], int n, int start) {
queue<int> q;
for(int i = 1; i <= n; ++i){
v[i] = INFINITY;
viz[i] = in_queue[i] = 0;
}
v[start] = 0;
q.push(start);
while(!q.empty()) {
int node = q.front();
q.pop();
for(int i = 0; i < gr[node].size(); ++i){
int x = v[node] + cst[make_pair(node, gr[node][i])];
if(x < v[gr[node][i]]) {
v[gr[node][i]] = x;
q.push(gr[node][i]);
}
}
}
}
int main() {
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m, a, b, c, minn, res = 0;
fin >> n >> m;
for(int i = 0; i < m; ++i) {
fin >> a >> b >> c;
gr[a].push_back(b);
if(cst.find(make_pair(a, b)) != cst.end())
cst[make_pair(a, b)] = min(c, cst[make_pair(a, b)]);
else
cst[make_pair(a, b)] = c;
}
dijkstra(dmin, n, 1);
for(int i = 2; i <= n; ++i)
fout << (dmin[i] == INFINITY?0:dmin[i]) << " ";
return 0;
}