Pagini recente » Cod sursa (job #3263336) | Cod sursa (job #1677868) | Cod sursa (job #375158) | Cod sursa (job #1858140) | Cod sursa (job #2203368)
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<unordered_set>
#include<bitset>
#include<limits>
using namespace std;
int inf = 0xFFFFFFF;
#define pp pair<int,int>
#define vpp vector<pp>
#define m_p make_pair
vector<pair<int, int>> vec[100];
int distanta[50033];
int n, m;
void dijkstra() {
int ma = inf;
memset(distanta,15 , 100);
inf = distanta[1];
distanta[1] = 0;
set<pp> h;
h.insert(m_p(0, 1));
while (!h.empty()) {
int node = h.begin()->second;
int dist = h.begin()->first;
h.erase(h.begin());
for (vpp::iterator it = vec[node].begin(); it != vec[node].end(); it++) {
int to = it->second;
int cost = it->first;
if (distanta[to] > cost + distanta[node]) {
if (distanta[to] != inf) {
h.erase(h.find(m_p(to,distanta[to])));
}
distanta[to] = cost + distanta[node];
h.insert(m_p(distanta[to], to));
}
}
}
}
void read() {
int x, y, length;
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d %d %d", &x, &y, &length);
vec[x].push_back(m_p(length,y));
}
}
void afisare() {
for (int i = 2; i <= n; i++) {
printf("%d ", distanta[i] == inf ? 0 : distanta[i]);
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
read();
dijkstra();
afisare();
return 0;
}