Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 1446 지름길 본문

Programming/BOJ

[백준/BOJ] 1446 지름길

he1fire 2020. 9. 30. 12:58
728x90

문제 : 1446 지름길

 

1446번: 지름길

첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하이고, D는 10,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이가 주

www.acmicpc.net

고속도로의 길이와 자름길 정보가 주어질때,

운전해야하는 거리의 최솟값을 구하는 문제이다.

Dijkstra 알고리즘을 사용해 최단거리를 구하면 된다.


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, visit[10005];
vector<ABC> arr[10005];
priority_queue<ABC> pq;
ll Dijkstra(ll st, ll ed){
    fill(&visit[0],&visit[10004],INF);
    pq.push({st,0});
    visit[st]=0;
    while (!pq.empty()){
        ll x=pq.top().idx, curr=pq.top().dst;
        pq.pop();
        if (visit[x]<curr)
            continue;
        for (int i=0;i<arr[x].size();i++){
            ll dx=arr[x][i].idx, next=arr[x][i].dst;
            if (visit[dx]>curr+next){
                visit[dx]=curr+next;
                pq.push({dx,curr+next});
            }
        }
        if (x+1<=M && visit[x+1]>curr+1){
            visit[x+1]=curr+1;
            pq.push({x+1,curr+1});
        }
    }
    return visit[ed];
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N >> M;
    for (int i=0;i<N;i++){
        ll a, b, c;
        cin >> a >> b >> c;
        arr[a].push_back({b,c});
    }
    cout << Dijkstra(0,M);
    return 0;
}
728x90

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

[백준/BOJ] 13140 Hello World!  (0) 2020.10.07
[백준/BOJ] 1162 도로포장  (0) 2020.10.02
[백준/BOJ] 1766 문제집  (0) 2020.09.29
[백준/BOJ] 2056 작업  (0) 2020.09.29
[백준/BOJ] 1516 게임 개발  (0) 2020.09.29
Comments