ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 - 택배 배송 (5972) [C++]
    문제 풀이/백준 2023. 8. 16. 13:32
    반응형

     이 문제는 다익스트라 알고리즘을 사용하는 문제이다. 한 지점에서 한 지점의 최단 거리를 구하기 때문에 다익스트라를 사용하면 쉽게 풀 수 있다.

     

     주의할 점은 C++에서 우선순위 큐의 디폴트로 최대 힙이므로 cost를 -를 붙여서 넣어줘야 하고, pair<int, int> 를 우선순위 큐 내부에 사용할 경우 first부터 우선순위가 부여되므로 cost, next 순으로 넣어줘야 한다.

     

     

     

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <queue>
    
    using namespace std;
    
    #define INF 100000000
    
    vector<pair<int, int>> edges[50001];
    int dist[50001];
    
    int dijkstra(int start, int end) {
    	priority_queue<pair<int, int>> pq;
    
    	dist[start] = 0;
    
    	pq.push({ 0, 1 });
    
    	while (!pq.empty()) {
    		pair<int, int> temp = pq.top();
    		int present = temp.second;
    		int cost = -temp.first;
    		pq.pop();
    
    		if (cost > dist[present]) {
    			continue;
    		}
    
    		for (int i = 0; i < edges[present].size(); i++) {
    			int next = edges[present][i].first;
    			int nextCost = edges[present][i].second + dist[present];
    
    			if (nextCost < dist[next]) {
    				dist[next] = nextCost;
    				pq.push({ -nextCost, next });
    			}
    		}
    	}
    
    	return dist[end];
    }
    
    int main() {
    	ios_base::sync_with_stdio(0);
    	cin.tie(0);
    
    	int N, M;
    
    	cin >> N >> M;
    
    	for (int i = 1; i <= N; i++) {
    		dist[i] = INF;
    	}
    
    	for (int i = 0; i < M; i++) {
    		int a, b, c;
    
    		cin >> a >> b >> c;
    
    		edges[a].push_back({ b, c });
    		edges[b].push_back({ a, c });
    	}
    
    	cout << dijkstra(1, N) << '\n';
    
    	return 0;
    }
    반응형

    '문제 풀이 > 백준' 카테고리의 다른 글

    백준 - 로프 (2217) [C++]  (0) 2023.08.16
    백준 - 회의실 배정 (1931) [C++]  (0) 2023.08.16
    백준 - 동전 1 (2293) [C++]  (0) 2023.08.15
    백준 - 동전 2 (2294) [C++]  (0) 2023.08.15
    백준 - 20058 [C++]  (0) 2023.08.05
Designed by Tistory.