Pagini recente » Cod sursa (job #300238) | Cod sursa (job #2001228) | Cod sursa (job #112951) | Cod sursa (job #3295137) | Cod sursa (job #3005238)
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int DIM = 50010;
typedef pair<int, int> Pair;
int n, m, x, y, c;
int dist[DIM];
vector<pair<int, int>> l[DIM];
priority_queue<Pair, vector<Pair>, greater<Pair>> pq;
bool visited[DIM];
void dijkstra(int start) {
dist[start] = 0;
pq.push(make_pair(0, start));
while (!pq.empty()) {
int node = pq.top().second;
pq.pop();
if (visited[node]) continue;
visited[node] = true;
for (auto adjElem : l[node]) {
int adjNode = adjElem.first;
int adjDist = adjElem.second;
if (dist[adjNode] > dist[node] + adjDist) {
dist[adjNode] = dist[node] + adjDist;
pq.push(make_pair(dist[adjNode], adjNode));
}
}
}
}
int main() {
fin >> n >> m;
for (int i = 1; i <= m; i++) {
fin >> x >> y >> c;
l[x].push_back(make_pair(y, c));
}
for (int i = 1; i <= n; i++)
dist[i] = INT_MAX;
dijkstra(1);
for (int i = 2; i <= n; i++)
fout << (dist[i] == INT_MAX ? 0 : dist[i]) << ' ';
return 0;
}