본문 바로가기
Algorithm 💫/Problem Solving

[백준] 14284번: 간선 이어가기2 / C++

by 돼지고기맛있다 2021. 9. 27.
반응형

✏️ 문제 링크

https://www.acmicpc.net/problem/14284

 

14284번: 간선 이어가기 2

정점 n개, 0개의 간선으로 이루어진 무방향 그래프가 주어진다. 그리고 m개의 가중치 간선의 정보가 있는 간선리스트가 주어진다. 간선리스트에 있는 간선 하나씩 그래프에 추가해 나갈 것이다.

www.acmicpc.net

 

 

✏️ 문제 설명 (더보기 클릭 👆🏻)

 

✏️ 문제 풀이

2021.09.15 - [Algorithm 🧠/알고리듬(thm) 공부 🌱] - [백준] 1916: 최소비용 구하기/ 다익스트라 / C++ ⭐

 

[백준] 1916: 최소비용 구하기/ 다익스트라 / C++ ⭐

✏️ 문제 링크 https://www.acmicpc.net/problem/1916 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째..

ssinee.tistory.com

위 문제를 이해하면 쉽게 풀 수 있는 문제 😊

 

✏️ 문제 코드

#include <bits/stdc++.h>

using namespace std;
using pii=pair<int, int>;

#define MAX 5001
#define INF 987654321

vector<int> dist(MAX, INF);
vector<pii> vec[MAX];

int dijkstra(int s, int t){
    priority_queue<pii> pq; pq.push({0, s});
    dist[s]=0;
    
    while(!pq.empty()){
        pii t=pq.top(); pq.pop();
        int c=t.second; int d=t.first*-1;
        
        if(dist[c]<d)continue;
        for(int i=0; i<vec[c].size(); i++){
            int nxt=vec[c][i].first;
            int nxt_d=vec[c][i].second + d;
            if(nxt_d<dist[nxt]){
                dist[nxt]=nxt_d;
                pq.push({nxt_d*-1, nxt});
            }
        }
    }
    
    return dist[t];
}
int main(){
    
    int n, m; cin>>n>>m;
    while(m--){
        int a,b,c; cin>>a>>b>>c;
        vec[a].push_back({b, c});
        vec[b].push_back({a, c});
    }
    
    int s, t; cin>>s>>t;
    
    cout<<dijkstra(s, t);

    return 0;
}

 

 

 

 ⭐ if feedback and question : comment please⭐  

 

 

 

 

 

반응형

댓글