Pagini recente » Profil StarGold2 | Cod sursa (job #963336) | Cod sursa (job #1189281) | Cod sursa (job #740837) | Cod sursa (job #1708498)
#include <cstdio>
#include <set>
#include <vector>
#include <climits>
#define MaxN 50001
using namespace std;
int inf = INT_MAX,N,M,d[MaxN];
vector <int> G[MaxN],C[MaxN];
set< pair<int,int> > S;
void Dijkstra()
{
int i,j,k,val,x;
for( i = 2 ; i <= N ; ++i )
d[i] = inf;
S.insert( make_pair(0,1) );
while( S.size() > 0 )
{
val = S.begin()->first;
x = S.begin()->second;
S.erase(S.begin());
for( i = 0 ; i < G[x].size() ; i++ )
if( d[ G[x][i] ] > val+C[x][i] )
{
d[ G[x][i] ] = val+C[x][i];
S.insert(make_pair(d[G[x][i]],G[x][i]));
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int i,a,b,c;
scanf("%d %d\n",&N,&M);
for( i = 1 ; i <= M ; ++i )
{
scanf("%d %d %d\n",&a,&b,&c);
G[a].push_back(b);
C[a].push_back(c);
}
Dijkstra();
for( i = 2 ; i <= N ; ++i )
printf("%d ",d[i] == inf ? 0 : d[i]);
fclose(stdin);
fclose(stdout);
return 0;
}