Pagini recente » Cod sursa (job #1346967) | Cod sursa (job #2322912) | Cod sursa (job #572836) | Cod sursa (job #756995) | Cod sursa (job #895632)
Cod sursa(job #895632)
#include <cstdio>
#include <queue>
#include <cstring>
#include <vector>
#include <algorithm>
#define NMAX 50001
#define INF 0x3f3f3f3f
#define nod first
#define cost second
#define PII pair< int, int >
using namespace std;
int N, M, i, x, y, c;
int D[NMAX];
vector< PII > G[NMAX];
struct comp
{
bool operator () (const int &X, const int &Y)
{
return ( D[X] > D[Y] );
}
};
priority_queue< int, vector<int>, comp > Q;
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d", &N, &M);
for( ; M--; )
{
scanf("%d%d%d", &x, &y, &c);
G[x].push_back( make_pair( y, c ) );
}
memset( D, INF, sizeof(D) );
D[1] = 0;
Q.push( 1 );
while( !Q.empty() )
{
int Nod = Q.top();
Q.pop();
for( vector< PII >::iterator it = G[Nod].begin(); it != G[Nod].end(); ++it )
if( D[Nod] + (*it).cost < D[(*it).nod] )
{
D[(*it).nod] = D[Nod] + (*it).cost;
Q.push( (*it).nod );
}
}
for( i = 2; i <= N; ++i )
if( D[i] == INF )
printf("0 ");
else
printf("%d ", D[i]);
printf("\n");
return 0;
}