본문으로 바로가기

[백준]1916문제

category 카테고리 없음 2017. 7. 2. 22:33

#include <cstdio>

#include <queue>

#include <vector>

#define INF 987654321


using namespace std;


int V,E,S,P; //V,E 도시,버스 개수  S,P 출발,도착 지

vector< vector < pair <int, int> > > mat(1001);

//<도착점,비용>


vector<int> dijkstra(int s){


priority_queue<pair<int, int>,vector<pair<int, int> >,greater<pair<int, int> > > pq;

//자료형,구현체,비교연산자

//비교 연산자에는 less<자료형>과 greater<자료형>이 있습니다. 

//less는 큰 순서대로, greater은 작은 순서대로 출력됨

        


pq.push(make_pair(0,s)); //pq는 cost,위치

vector<int> dist(V+1,INF); //dist 는 INF 값으로 초기화된 V+q개의 원소를 갖는다.


dist[s]=0;


while(!pq.empty())

{

    int cost = pq.top().first, here = pq.top().second;

    pq.pop();

    

if(dist[here] < cost) continue;

for(int i=0;i<mat[here].size();i++)

{

int nextcost = cost + mat[here][i].second;

int there = mat[here][i].first;

      

if(dist[there] > nextcost)

{

dist[there] = nextcost;

pq.push(make_pair(nextcost,there));

}


     }


}

return dist;

}


int main(){


scanf("%d %d",&V,&E);// 도시 개수, 버스 개수

for(int i=0;i<E;i++){

int u,v,w;

scanf("%d %d %d",&u,&v,&w);

mat[u].push_back(make_pair(v,w));

}

scanf("%d %d",&S,&P);

vector<int> dist = dijkstra(S);

printf("%d",dist[P]);

}