Pagini recente » Cod sursa (job #2435424) | Cod sursa (job #2748201) | Cod sursa (job #1216297) | Cod sursa (job #2154360) | Cod sursa (job #2434893)
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
typedef std::pair<int, int> int_pair;
inline void print(int n) {
char snum[65];
int i = 0;
do {
snum[i++] = n % 10 + '0';
n /= 10;
} while (n);
--i;
while (i >= 0) {
putchar(snum[i--]);
}
putchar(' ');
}
inline int read() {
int n = 0;
char c = getchar_unlocked();
while (!('0' <= c && c <= '9')) {
c = getchar_unlocked();
}
while ('0' <= c && c <= '9') {
n = (n << 3) + (n << 1) + c - '0';
c = getchar_unlocked();
}
return n;
}
class Graph {
private:
int nr_nodes;
std::vector<std::pair<int, int>> *adj;
public:
Graph(int nr_nodes) {
this->nr_nodes = nr_nodes;
adj = new std::vector<int_pair> [nr_nodes];
}
~Graph() {
delete [] adj;
}
void addEdge(int src, int dest, int cost) {
adj[src].push_back(std::make_pair(dest, cost));
adj[dest].push_back(std::make_pair(src, cost));
}
void dijkstra(int src) {
std::priority_queue <int_pair, std::vector<int_pair>,
std::greater<int_pair>> pq;
std::vector<int> dist(nr_nodes, INF);
std::vector<bool> visited(nr_nodes, false);
pq.push(std::make_pair(0, src));
dist[src] = 0;
while (!pq.empty()) {
int node_src = pq.top().second;
pq.pop();
if (!visited[node_src]) {
for (auto it : adj[node_src]) {
int node_dest = it.first;
int w = it.second;
if (dist[node_dest] > dist[node_src] + w) {
dist[node_dest] = dist[node_src] + w;
pq.push(std::make_pair(dist[node_dest], node_dest));
}
}
visited[node_src] = true;
}
}
for (int i = 1 ; i < nr_nodes ; ++i) {
print(dist[i]);
}
}
};
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m, src, dest, cost;
n = read();
m = read();
Graph graph(n);
for (; m ; --m) {
src = read(), dest = read(), cost = read();
graph.addEdge(src - 1, dest - 1, cost);
}
graph.dijkstra(0);
return 0;
}