๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Gold

[BOJ] 10217 : KCM Travel

by Jaeguk 2022. 1. 27.
๋ฌธ์ œ ๋งํฌ

10217๋ฒˆ: KCM Travel (acmicpc.net)

 

10217๋ฒˆ: KCM Travel

๊ฐ๊ณ ์˜ ๋…ธ๋ ฅ ๋์— ์ฐฌ๋ฏผ์ด๋Š” 2014 Google Code Jam World Finals์— ์ง„์ถœํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ตฌ๊ธ€์—์„œ ์˜จ ์ดˆ๋Œ€์žฅ์„ ๋ฐ›๊ณ  ๊ธฐ๋ปํ–ˆ๋˜ ๊ฒƒ๋„ ์ž ์‹œ, ์ฐฌ์ฐฌํžˆ ์ฝ์–ด๋ณด๋˜ ์ฐฌ๋ฏผ์ด๋Š” ์ค‘์š”ํ•œ ์‚ฌ์‹ค์„ ์•Œ์•„์ฐจ๋ ธ๋‹ค. ์ตœ๊ทผ์˜ ๋Œ€์„ธ

www.acmicpc.net

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

ํ’€์ด

์ฒ˜์Œ์— Dp์— ๊ทธ ์ง€์ ๊นŒ์ง€ ์™”์„ ๋•Œ์˜ ์‹œ๊ฐ„ ๋˜๋Š” ๋น„์šฉ์„ ์ €์žฅํ•ด์„œ ๋‹ค์Œ ๋ฒˆ์— ๋‹ค์‹œ ๊ทธ ์ง€์ ์— ๋„์ฐฉํ–ˆ์„ ๋•Œ

์‹œ๊ฐ„์ ์œผ๋กœ ํ˜น์€ ๋น„์šฉ์ ์œผ๋กœ ๋” ๋น„ํšจ์œจ์ ์ด๋ผ๋ฉด ๋ฉˆ์ถ”๊ณ  ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ ธ๋‹ค.

์˜ˆ์ „์— ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ์—์„œ ์ด๋ ‡๊ฒŒ ํ’€์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚˜์„œ ์ด๋ฒˆ์—๋„ ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐฑํŠธ๋ž˜ํ‚น์€ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ํƒ์ƒ‰ํ•˜๋‹ค๋ณด๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. ์–ด๋–ป๊ฒŒ๋“  ์‹œ๊ฐ„์„ ์ค„์—ฌ๋ณด๋ ค ํ–ˆ์ง€๋งŒ ์•ˆ๋๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ์จ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ. Dp๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค์ต์ŠคํŠธ๋ผ์— ์ ‘๋ชฉ์‹œํ‚ฌ๊นŒ?

์‚ฌ์‹ค ๋˜‘๊ฐ™๋‹ค.

๊ฐ€์žฅ ์งง์€ ์†Œ์š”์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์šฐ์„ ์ˆœ์œ„ํ๋Š” ์‹œ๊ฐ„ ๊ธฐ์ค€ ์งง์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ.

๋งŒ์•ฝ ํ•œ ์ง€์ ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ๊ฐ™์€ ๋ˆ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์‹œ๊ฐ„์ด ์งง์„ ์ˆ˜๋ก ์ข‹์€ ๊ฒฝ๋กœ์ด๋‹ค.

์ฆ‰ Dp[์ •์ ][๋น„์šฉ] ๋Œ€๋น„ ์‹œ๊ฐ„์ด ์ ์„ ์ˆ˜๋ก ์œ ๋ฆฌํ•œ ๊ฒฝ๋กœ.

Dp[now][cost] < ํ˜„์žฌ๊นŒ์ง€ ๊ฑธ๋ฆฐ์‹œ๊ฐ„ ์ด๋ผ๋ฉด ํƒ์ƒ‰์„ ๋ฉˆ์ถ”๊ณ  ๋‹ค์Œ ๊ฒฝ์šฐ๋กœ ๊ฐ„๋‹ค.

 

<์ฝ”๋“œ>

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <queue>
#include <climits>
#include <algorithm>
using namespace std;
const int MAX_N = 100 + 5;
const int INF = INT_MAX;
typedef priority_queue <pair<pair<int,int>int>vector<pair<pair<int,int>int>>, greater<pair<pair<int,int>,int>>> Priority_queue;
int T, N, M, K;
vector<pair<pair<intint>int>> Edge[MAX_N];
int Dp[MAX_N][10000 + 5];
 
void dijkstra(int st) {
    Priority_queue pq;
    pq.push({ { 0,st }, 0 });
    while (!pq.empty()) {
        int now = pq.top().first.second;
        int Time = pq.top().first.first;
        int cost = pq.top().second;
        pq.pop();
        if (Dp[now][cost] < Time)
            continue;
        Dp[now][cost] = Time;
        for (int i = 0; i < Edge[now].size(); i++) {
            int next = Edge[now][i].first.first;
            int acost = cost + Edge[now][i].first.second;
            int atime = Time + Edge[now][i].second;
            if (acost > M)
                continue;
            if (Dp[next][acost] <= atime)
                continue;
            for (int j = acost; j <= M; j++) {
                if (Dp[next][j] > atime)
                    Dp[next][j] = atime;
            }
            pq.push({ {atime, next},acost });
        }
    }
}
 
void Init() {
    for (int i = 0; i < MAX_N; i++) {
        Edge[i].clear();
    }
    for (int i = 0; i < MAX_N; i++) {
        for (int j = 0; j < 10000 + 5; j++) {
            Dp[i][j] = INF;
        }
    }
}
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> T;
    while (T--) {
        cin >> N >> M >> K;
        Init();
        int ans = INF;
        for (int i = 0; i < K; i++) {
            int u, v, c, d;
            cin >> u >> v >> c >> d;
            Edge[u].push_back({ {v,c},d });
        }
        dijkstra(1);
        for (int i = 0; i <= M; i++) {
            ans = min(ans, Dp[N][i]);
        }
        if (ans == INF)
            cout << "Poor KCM\n";
        else cout << ans << "\n";
    }
    return 0;
}
cs

๋งˆ์ง€๋ง‰์— Dp[N]์— ์ €์žฅ๋œ ๊ฐ’์ค‘์— ๋น„์šฉ์€ M์ดํ•˜๋ฉด ์–ผ๋งˆ๋“  ์ƒ๊ด€์—†์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์ ๊ฒŒ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

728x90

'๋ฐฑ์ค€ > Gold' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] 1806 : ๋ถ€๋ถ„ํ•ฉ  (1) 2022.02.02
[BOJ] 2470 : ๋‘ ์šฉ์•ก  (0) 2022.02.02
[BOJ] 9370 : ๋ฏธํ™•์ธ ๋„์ฐฉ์ง€  (0) 2022.01.24
[BOJ] 1707 : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„  (1) 2022.01.21
[BOJ] 1579 : ์•ฑ  (0) 2022.01.20