Pagini recente » Cod sursa (job #2449381) | Cod sursa (job #610186) | Cod sursa (job #1441135) | Cod sursa (job #2789144) | Cod sursa (job #1486889)
#include<stdio.h>
#include<iostream>
#include<vector>
#include<queue>
#define fs first
#define sc second
#define mp make_pair
#define inf 2000000000
using namespace std;
int N,M,x,y,z,d[50010];
vector<pair<int,int> > m[50010];
priority_queue<pair<int,int> > pq;
bool viz[50010];
void dijkstra(int r) {
for(int i=1;i<=N;++i) {
d[i] = inf;
}
d[r] = 0;
pq.push(make_pair(0,r));
while(!pq.empty()) {
int x = pq.top().sc;
pq.pop();
viz[x] = 1;
for(int i=0; i<m[x].size(); ++i) {
int y = m[x][i].fs;
int c = m[x][i].sc;
if(!viz[y]) {
if(d[y] > c + d[x]) {
d[y] = c + d[x];
pq.push(make_pair(-d[y],y));
}
}
}
}
}
int main() {
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
// freopen("input.in","r",stdin);
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;
}