Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 1916 최소비용 구하기 본문

Programming/BOJ

[백준/BOJ] 1916 최소비용 구하기

he1fire 2020. 12. 4. 16:13
728x90

문제 : 1916 최소비용 구하기

 

1916번: 최소비용 구하기

첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그

www.acmicpc.net

 

도시의 개수와 도시들 간에 운행하는 버스의 비용이 주어졌을 때

최소비용으로 이동하는 금액을 출력하는 문제이다.

다익스트라 알고리즘을 이용해서 해결하면 최소비용을 쉽게 구할 수 있다.


Code

#include <bits/stdc++.h>
#define ll long long
#define INF 1e9+7
using namespace std;
struct ABC{
    ll idx, dst;
    ABC() {}
    ABC(ll idx, ll dst): idx(idx), dst(dst) {} 
};
bool operator<(ABC x, ABC y){
    return x.dst>y.dst;
}
ll N, M, visited[1005];
vector<ABC> arr[1005];
priority_queue<ABC> pq;
ll dijkstra(ll st, ll ed){
    fill(&visited[0],&visited[1004],INF);
    visited[st]=0;
    pq.push({st,0});
    while (!pq.empty()){
        ll x=pq.top().idx, curr=pq.top().dst;
        pq.pop();
        if (curr>visited[x])
            continue;
        for (int i=0;i<arr[x].size();i++){
            ll dx=arr[x][i].idx, next=arr[x][i].dst;
            if (visited[dx]>curr+next){
                visited[dx]=curr+next;
                pq.push({dx,curr+next});
            }
        }
    }
    return visited[ed];
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N >> M;
    for (int i=0;i<M;i++){
        ll a, b, c;
        cin >> a >> b >> c;
        arr[a].push_back({b,c});
    }
    ll st, ed;
    cin >> st >> ed;
    cout << dijkstra(st,ed);
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 3321 가장 큰 직사각형  (0) 2021.09.18
[백준/BOJ] 2573 빙산  (0) 2021.01.08
[백준/BOJ] 9375 패션왕 신혜빈  (0) 2020.12.01
[백준/BOJ] 1080 행렬  (0) 2020.11.29
[백준/BOJ] 1074 Z  (0) 2020.11.29
Comments