16167 : A Great Way

풀이

잘 짜주면 된다.

코드

#include <cstdio>
#include <queue>
#include <vector>
#define fst first
#define snd second
using namespace std;

int n, m;
struct abc {
    int idx, cst;
};
vector<abc> gph[101];
pair<int, int> dp[101];

int main() {
    scanf("%d %d", &n, &m);
    while (m--) {
        int a, b, c, d, e;
        scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
        if (e > 10) c += ((e-10)*d);
        gph[a].push_back({ b,c });
    }
    for (int i = 0; i <= n; i++) dp[i].fst = dp[i].snd = 1e9;
    queue<int> que;
    que.push(1);
    dp[1].fst = 0; dp[1].snd = 1;
    while (!que.empty()) {
        int now = que.front();
        que.pop();
        for (abc nxt : gph[now]) {
            if (dp[nxt.idx].fst == dp[now].fst + nxt.cst) {
                if (dp[nxt.idx].snd > dp[now].snd + 1) {
                    dp[nxt.idx].snd = dp[now].snd + 1;
                    que.push(nxt.idx);
                }
            }
            if (dp[nxt.idx].fst > dp[now].fst + nxt.cst) {
                dp[nxt.idx].fst = dp[now].fst + nxt.cst;
                dp[nxt.idx].snd = dp[now].snd + 1;
                que.push(nxt.idx);
            }
        }
    }
    if (dp[n].fst == 1e9) {
        return !printf("It is not a great way.");
    }
    printf("%d %d\n", dp[n].fst, dp[n].snd);
    return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-10-01 09:46

Read more posts by this author