Pagini recente » Cod sursa (job #230686) | Cod sursa (job #3240472) | Cod sursa (job #73393) | Cod sursa (job #2698421) | Cod sursa (job #1966281)
#include <bits/stdc++.h>
#define maxN 50002
#define pii pair <int, int>
#define mp make_pair
#define inf (1 << 30)
FILE *fin = freopen("dijkstra.in", "r", stdin);
FILE *fout = freopen("dijkstra.out", "w", stdout);
using namespace std;
int N, M;
struct comp{
bool operator () (const pii &a, const pii &b){
return a.second > b.second;
}
};
vector <pii> G[maxN];
priority_queue <pii, vector <pii>, comp> pq;
bitset <maxN> used;
int d[maxN];
void dijkstra(){
while(pq.size()){
pii p = pq.top();
int u = p.first;
pq.pop();
if(used.test(u)) continue;
used.set(u);
for(pii p : G[u]){
int v = p.first, c = p.second;
if(used.test(v)) continue;
if(d[u] + c < d[v]){
d[v] = d[u] + c;
pq.push(mp(v, d[v]));
}
}
}
}
int main(){
scanf("%d%d", &N, &M);
for(int i = 1; i <= M; ++ i){
int x, y, c;
scanf("%d%d%d", &x, &y, &c);
G[x].push_back(mp(y, c));
G[y].push_back(mp(x, c));
}
for(int i = 2; i <= N; ++ i)
d[i] = inf;
pq.push(mp(1, 0));
dijkstra();
for(int i = 2; i <= N; ++ i)
if(d[i] == inf)
printf("0 ");
else printf("%d ", d[i]);
return 0;
}