Pagini recente » Cod sursa (job #1526035) | Cod sursa (job #1261894) | Cod sursa (job #2865526) | Cod sursa (job #1032575) | Cod sursa (job #3143949)
#include <fstream>
#include <queue>
#include <vector>
#include <map>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int inf = 2e9;
int n, m, dist[50005];
vector<int> v[50005];
map<pair<int, int>, int> mat;
bool vzt[50005];
struct nod {
int val;
bool operator>(nod a) const {
return dist[val] < dist[a.val];
}
bool operator<(nod a) const {
return dist[val] > dist[a.val];
}
bool operator==(nod a) const {
return dist[val] == dist[a.val];
}
};
priority_queue<nod> que;
int main()
{
in >> n >> m;
for(int i=1; i<=m; i++) {
int x, y;
in >> x >> y >> mat[{x, y}];
v[x].push_back(y);
}
for(int i=2; i<=n; i++)
dist[i] = inf;
que.push({1});
while(!que.empty()) {
int pos = que.top().val;
que.pop();
if(vzt[pos])
continue;
for(int i=0; i<v[pos].size(); i++) {
if(dist[v[pos][i]] > dist[pos] + mat[{pos, v[pos][i]}]) {
dist[v[pos][i]] = dist[pos] + mat[{pos, v[pos][i]}];
que.push({v[pos][i]});
}
}
vzt[pos] = 1;
}
for(int i=2; i<=n; i++)
if(dist[i] != inf)
out << dist[i] << ' ';
else out << "0 ";
return 0;
}