Pagini recente » Cod sursa (job #2375080) | Cod sursa (job #3206042) | Cod sursa (job #350353) | Cod sursa (job #1902971) | Cod sursa (job #2285470)
#include <cstdio>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
int n, m;
vector<vector<pair<int, int> > > graph;
void read() {
int source, target, cost;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
graph.push_back(vector<pair<int, int> >());
}
for (int i = 0; i < m; i++) {
scanf("%d %d %d", &source, &target, &cost);
graph[source - 1].push_back(make_pair(cost, target - 1));
}
}
vector<int> dijkstra(int start_node) {
vector<int> cost(graph.size(), INF);
priority_queue<pair<int, int> > fringe;
int current_node;
fringe.push(make_pair(0, start_node));
cost[start_node] = 0;
while (!fringe.empty()) {
current_node = fringe.top().second;
fringe.pop();
for (vector<pair<int, int> >::iterator it = graph[current_node].begin(); it != graph[current_node].end(); it++) {
if (cost[it->second] > cost[current_node] + it->first) {
cost[it->second] = cost[current_node] + it->first;
fringe.push(make_pair(-cost[it->second], it->second));
}
}
}
for (vector<int>::iterator it = cost.begin(); it != cost.end(); it++) {
if (!*it) {
continue;
} else if (*it == INF) {
printf("0 ");
} else {
printf("%d ", *it);
}
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
read();
dijkstra(0);
}