ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1854 - K번째 최단경로 찾기
    알고리즘/백준 2024. 12. 7. 19:55

    문제

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

     

    풀이

    방법만 알면 쉬운 문제, k 번째의 최단 거리를 구하면 된다.

    기본 다익스트라를 조금 변형하면 된다.우선순위 큐에 거리를 push하면서 진행하면 된다. K <= 100 이기 때문에 상수시간안에 가능하다.

     

    코드

    더보기
    #include <vector>
    #include <stdio.h>
    #include <stdlib.h>
    #include <cstring>
    #include <queue>
    #include <iostream>
    #include <algorithm>
    #include <stack>
    #include <string>
    #include <unordered_map>
    using namespace std;
    int N, M, K;
    struct Node {
    	int n;
    	long long c;
    	bool operator<(Node o) const {
    		return c > o.c;
    	}
    };
    vector<Node> graph[1001];
    priority_queue<Node> pq;
    priority_queue<long long> ret[1001];
    int main() {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	cout.tie(0);
    	cin >> N >> M >> K;
    	for (int i = 0; i < M; ++i) {
    		int a, b, c;
    		cin >> a >> b >> c;
    		graph[a].push_back({ b, c });
    	}
    	ret[1].push(0);
    	pq.push({ 1, 0 });
    	while (!pq.empty()) {
    		Node now = pq.top();
    		pq.pop();
    		for (int i = 0; i < graph[now.n].size(); ++i) {
    			Node nxt = graph[now.n][i];
    			long long nxtCost = nxt.c + now.c;
    			if (ret[nxt.n].size() >= K) {
    				if (ret[nxt.n].top() > nxtCost) {
    					ret[nxt.n].pop();
    					ret[nxt.n].push(nxtCost);
    					pq.push({ nxt.n, nxtCost });
    				}
    			}
    			else {
    				ret[nxt.n].push(nxtCost);
    				pq.push({ nxt.n, nxtCost });
    			}
    			//cout << nxtCost << " ";
    		}
    	}
    	for (int i = 1; i <= N; ++i) {
    		if (ret[i].size() < K) {
    			cout << -1 << "\n";
    			continue;
    		}
    		for (int j = 0; j < ret[i].size() - K; ++j) ret[i].pop();
    		cout << ret[i].top() << "\n";
    	}
    	return 0;
    }

     

    '알고리즘 > 백준' 카테고리의 다른 글

    [백준] 12752번 - 도시들  (1) 2025.01.04
    [백준] 5670번 - 휴대폰 자판  (0) 2024.12.22
    [백준] 11437 - LCA  (1) 2024.11.27
    [백준] 2679번 - 맨체스터의 도로  (1) 2024.09.17
    [백준] 18135번 - 겨울나기  (0) 2024.09.12
Designed by Tistory.