Pagini recente » Cod sursa (job #1851293) | Cod sursa (job #1533670) | Cod sursa (job #2528694) | Cod sursa (job #2861526) | Cod sursa (job #1509311)
#include<stdio.h>
#include<iostream>
#include<vector>
#include<queue>
#define fs first
#define sc second
#define mp make_pair
using namespace std;
int M,x,y,z;
#define inf 2000000000
int N, d[50010], viz[50010];
vector<pair<int,int> > m[50010];
priority_queue<pair<int,int> > pq;
void dijkstra(int r) {
for(int i=1;i<=N;++i) {
d[i] = inf;
}
d[r] = 0;
pq.push(mp(0,r));
while(!pq.empty()) {
int x = pq.top().sc;
pq.pop(); viz[x] = 1;
for(auto a: m[x]) {
int y = a.fs;
int c = a.sc;
if(!viz[y]) {
if(d[y] > c + d[x]) {
d[y] = c + d[x];
pq.push(mp(-d[y],y));
}
}
}
}
}
int main() {
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=M;++i) {
scanf("%d%d%d",&x,&y,&z);
m[x].push_back(mp(y,z));
}
dijkstra(1);
for(int i=2;i<=N;++i) {
if(d[i]!=inf) {
printf("%d ",d[i]);
} else {
printf("0 ");
}
}
return 0;
}