[1753] 최단경로

[1753] 최단경로

#include < queue >

#include < vector >

#include < iostream >

using namespace std ;

#define INF 100000000

priority_queue < pair < int , int > > q;

vector < pair < int , int > > v[ 20005 ];

int d[ 20005 ];

int n, m, s;

int main( void ) {

int i, j, a, b, c,cost,num,next, ncost;

cin > > n > > m > > s;

for (i = 0 ; i < m; i + + ) {

cin > > a > > b > > c;

v[a]. push_back ( make_pair (b, c));

}

for (i = 1 ; i < = n; i + + )

d[i] = INF;

d[s] = 0 ;

q.push( make_pair ( 0 , s));

while ( ! q.empty()) {

cost = - q.top().first;

num = q.top().second;

q. pop ();

for (i = 0 ; i < v[num]. size (); i + + ) {

next = v[num][i].first;

ncost = v[num][i].second;

if (d[next] > cost + ncost) {

d[next] = cost + ncost;

q.push( make_pair ( - d[next], next));

}

}

}

for (i = 1 ; i < = n; i + + ) {

if (d[i] = = INF) cout < < "INF" < < "

" ;

else cout < < d[i] < < "

" ;

}

return 0 ;

}

from http://dizlet.tistory.com/68 by ccl(A) rewrite - 2021-09-13 18:26:11