Pagini recente » Cod sursa (job #774729) | Cod sursa (job #915238) | Cod sursa (job #532293) | Cod sursa (job #2980685) | Cod sursa (job #387385)
Cod sursa(job #387385)
#include<stdio.h>
#include<vector>
#include<algorithm>
#define mp make_pair
#define pb push_back
#define N 52000
#define INF 0x3f3f3f3f
using namespace std;
int n, m, i, x, y, z, fol[N], sol[N],
q[10*N], p , u;
vector <pair <int, int> > a[N];
void citire(), bf();
int main(){
freopen("dijkstra.in","r", stdin);
freopen("dijkstra.out","w", stdout);
citire();
bf();
for (i = 2; i <= n; i++)
printf("%d ", (sol[i] != INF ? sol[i] : 0) );
return 0;
}
void citire(){
scanf("%d %d", &n, &m);
for (i = 1; i <= m; i++){
scanf("%d %d %d", &x, &y, &z);
a[x].pb(mp(y,z));
}
}
void bf(){
q[0] = 1; fol[1] = 1;
memset (sol, INF, sizeof(sol));
sol[1] = 0;
for (p = 0, u = 0; p <= u; p++){
x = q[p];
for (vector< pair< int, int> >::iterator it = a[x].begin(); it != a[x].end(); it++)
if (sol[x] + it->second < sol[it->first]){
sol[it->first] = sol[x] + it->second;
if (!fol[it->first]){
q[++u] = it->first;
fol[it->first] = 1;
}
}
fol[x] = 0;
}
}