Pagini recente » Cod sursa (job #1988069) | Cod sursa (job #2272089) | Cod sursa (job #222318) | Cod sursa (job #83480) | Cod sursa (job #3207564)
#include <bits/stdc++.h>
#define INF 1 << 30
#define MAXN 50000
using namespace std;
ifstream fin( "dijkstra.in" );
ofstream fout( "dijkstra.out" );
struct nod{
int v, c;
};
vector <nod> graph[MAXN + 1];
int d[MAXN + 1];
int marked[MAXN + 1];
class Compare {
public:
bool operator()(nod a, nod b){
return a.c < b.c;
}
};
priority_queue <nod, vector<nod>, Compare> pq;
void dijkstra( int s ){
d[s] = 0;
pq.push( {s, 0} );
marked[s] = 1;
while( !pq.empty() ){
int u = pq.top().v;
pq.pop();
marked[u] = 1;
for( int i = 0; i < graph[u].size(); i++ ){
int vecin, cost;
vecin = graph[u][i].v, cost = graph[u][i].c;
if( marked[vecin] == 0 && d[vecin] > d[u] + cost ){
d[vecin] = d[u] + cost;
pq.push( {vecin, d[vecin]} );
}
}
}
}
int main(){
int N, M, i;
fin >> N >> M;
for( i = 0; i < M; i++ ){
int x, y, cost;
fin >> x >> y >> cost;
graph[x].push_back( { y, cost } );
}
for( i = 1; i <= N; i++ )
d[i] = INF;
dijkstra(1);
for( i = 2; i <= N; i++ ){
if( d[i] == INF )
fout << 0 << ' ';
else
fout << d[i] << ' ';
}
}