어흥

[백준 5972] 택배 배송 (C++) 본문

알고리즘/백준

[백준 5972] 택배 배송 (C++)

라이언납시오 2021. 12. 17. 18:53
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/5972

 

5972번: 택배 배송

농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는

www.acmicpc.net

1. 주의할 점

- 다익스트라 알고리즘에 대해 알고 있어야 한다

 

2. 구현

- 1번 Node부터 각 Node까지의 거리를 MAX로 초기화한다

- 간선에 대한 정보를 V[] 벡터에 담는다

- 우선순위큐를 사용하여 다익스트라 알고리즘을 구현한다

#define MAX 987654321
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
struct info{
    int idx,val;
};
struct cmp{
    bool operator()(info &a, info &b){
        return a.val > b.val;
    }
};
vector<info> v[50001];
int node, edge,a,b,val,result;
int dist[50001];

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    cin>>node>>edge;
    //초기화
    for(int i=1;i<=node;i++)
        dist[i]=MAX;
    
    for(int i=0;i<edge;i++){
        cin>>a>>b>>val;
        v[a].push_back({b,val});
        v[b].push_back({a,val});
    }
    priority_queue<info,vector<info>,cmp> pq;
    dist[1]=0;
    pq.push({1,0});
    while(!pq.empty()){
        int cidx = pq.top().idx;
        int cv = pq.top().val;
        pq.pop();
        if(cidx==node){
            result=cv;
            break;
        }
        for(int i=0;i<v[cidx].size();i++){
            int next = v[cidx][i].idx;
            int nv = v[cidx][i].val;
            if(dist[next]>cv+nv){
                dist[next]=cv+nv;
                pq.push({next,cv+nv});
            }
        }
    }
    cout<<result;
    return 0;
}
728x90
반응형
Comments