Pagini recente » Cod sursa (job #2036958) | Cod sursa (job #2028431) | Cod sursa (job #2897054) | Cod sursa (job #2718037) | Cod sursa (job #1184790)
#define _CRT_SECURE_NO_DEPRECATE
#include <set>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
FILE *f, *g;
#define DMAX 50100
#define INF 1000000000
int n, m;
struct Graf{
int d;
vector<int> Adj, W;
}G[DMAX];
set<pair<int, int>> v;
void Dijkstra(){
int i, root, dist, ind, next;
for (i = 2; i <= n; i++) G[i].d = INF;
v.insert(make_pair(0, 1));
while (v.size() > 0){
dist = (*v.begin()).first; ind = (*v.begin()).second;
v.erase((*v.begin()));
for (i = 0; i < G[ind].Adj.size(); i++){
next = G[ind].Adj[i];
if (G[next].d > G[ind].W[i] + dist){
G[next].d = G[ind].W[i] + dist;
v.insert(make_pair(G[next].d, next));
}
}
}
}
int main(){
int i, x, y, w;
f = freopen("dijkstra.in", "r", stdin);
g = freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 0; i < m; i++){
scanf("%d %d %d", &x, &y, &w);
G[x].Adj.push_back(y);
G[x].W.push_back(w);
}
Dijkstra();
for (i = 2; i <= n; i++) { printf("%d ", G[i].d == INF ? 0 : G[i].d); }
return 0;
}