algorithm

BOJ 1753 (Dijkstra)

rkawk 2022. 9. 15. 19:15
๋”๋ณด๊ธฐ

์ตœ๋‹จ๊ฒฝ๋กœ ์„ฑ๊ณต

 
1 ์ดˆ 256 MB 141443 40780 20216 24.508%

๋ฌธ์ œ

๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ฃผ์–ด์ง„ ์‹œ์ž‘์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ์œผ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ชจ๋“  ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๋Š” 10 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) ๋ชจ๋“  ์ •์ ์—๋Š” 1๋ถ€ํ„ฐ V๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์‹œ์ž‘ ์ •์ ์˜ ๋ฒˆํ˜ธ K(1 ≤ K ≤ V)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ E๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ๊ฐ„์„ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜ (u, v, w)๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” u์—์„œ v๋กœ ๊ฐ€๋Š” ๊ฐ€์ค‘์น˜ w์ธ ๊ฐ„์„ ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. u์™€ v๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋ฉฐ w๋Š” 10 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ์Œ์— ์œ ์˜ํ•œ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ V๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ, i๋ฒˆ์งธ ์ค„์— i๋ฒˆ ์ •์ ์œผ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฒฝ๋กœ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์‹œ์ž‘์  ์ž์‹ ์€ 0์œผ๋กœ ์ถœ๋ ฅํ•˜๊ณ , ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” INF๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

5 6
1
5 1 1
1 2 2
1 3 3
2 3 4
2 4 5
3 4 6

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

0
2
3
7
INF
 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉด ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ์ด๋‹ค.

https://m.blog.naver.com/ndb796/221234424646

 

23. ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ™œ์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest Path) ํƒ...

blog.naver.com

ํ•ด๋‹นํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

 

DP์˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ์œผ๋กœ ๋…ธ๋“œ๊ฐ„์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

๊ฑฐ๋ฆฌ์— -๋ฅผ ๋ถ™์—ฌ ์ตœ์†Œํž™์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ์ฒ˜์Œ์ด๋‹ˆ ์ง๊ด€์ ์œผ๋กœ pq๋ฅผ greater<>๋ฅผ ์จ ์ตœ์†Œํž™์œผ๋กœ ์ •์˜ํ•˜์˜€๋‹ค.

 

์ธ์ ‘๋ฆฌ์ŠคํŠธ์™€ pq๋ฅผ ์‚ฌ์šฉํ•ด NlogE์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ํ•˜์˜€๋‹ค.

 

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#define INF 987654321
using namespace std;
int N, E, K;
vector<vector<pair<int,int>>>graph(20001);
int main(){
    cin>>N>>E>>K;
    for(int i=0; i<E; i++){
        int u, v, w;
        cin>>u>>v>>w;
        graph[u].push_back({v,w});
    }

    vector<int>dist(N+1, INF);
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
    dist[K] = 0;
    pq.push({0, K});
    while(!pq.empty()){
        int cur_dist = pq.top().first;
        int cur_node = pq.top().second;
        pq.pop();
        for(int i=0; i<graph[cur_node].size(); i++){
            int nxt_node = graph[cur_node][i].first;
            int nxt_dist = cur_dist + graph[cur_node][i].second;
            if(nxt_dist < dist[nxt_node]){
                dist[nxt_node] = nxt_dist;
                pq.push({nxt_dist, nxt_node});
            }
        }
    }
    for(int i=1; i<=N; i++){
        if(dist[i] == INF) cout<<"INF"<<'\n';
        else cout<<dist[i]<<'\n';
    }

}

 

'algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ 1238  (0) 2022.09.17
BOJ 1504  (0) 2022.09.15
programmers ์ˆœ์œ„  (0) 2022.08.14
BOJ 10986  (0) 2022.07.09
BOJ 2580  (0) 2022.07.07