본문 바로가기

ProgramSoliving

백준 : 10217

반응형

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

 

10217번: KCM Travel

각고의 노력 끝에 찬민이는 2014 Google Code Jam World Finals에 진출하게 되었다. 구글에서 온 초대장을 받고 기뻐했던 것도 잠시, 찬찬히 읽어보던 찬민이는 중요한 사실을 알아차렸다. 최근의 대세에 힘입어 구글 역시 대기업답게 비용 감축에 열을 내고 있었던 것이다. 초대장 내용에 의하면 구글은 찬민에게 최대 M원까지의 비용만을 여행비로써 부담해주겠다고 한다. 인천에서 LA행 직항 한 번 끊어주는게 그렇게 힘드냐고 따지고도 싶었지만,

www.acmicpc.net

 

문제 접근 방법
제약시간 10초에 많은 TestCase를 테스트하는 문제였다.

처음에는 단방향 노드인데 아무생각없이 양방향노드로 설정해두고 그래서 시간초과해서 틀렸다.

문제를 보면 비용안에서 최단시간을 구하는문젠다. 따라서 digit 배열이 1차원이 아닌 2차원으로 어느비용에서 최단으로 갈수 있는지 선택하면된다.

또한 priorityQueue를 이용해서 제일 N에 먼저도착하는 노드가 제일 빠른시간이되도록 만들어줌으로서 시간을 줄일수가 있다.
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package day0308;
 
 
public class B10217 {
    static final int INF = Integer.MAX_VALUE;
    static int Answer = INF;
    static int T;
    static int N, M, K;
    static int digit[][];
 
    static class VER implements Comparable<VER>{
        int u;
        int c;
        int d;
 
        public VER(int u, int c, int d) {
            super();
            this.u = u;
            this.c = c;
            this.d = d;
        }
 
        @Override
        public int compareTo(VER o) {
            return this.d-o.d;
        }
    }
 
    static PriorityQueue<VER> q;
    static ArrayList<VER> ver[];
 
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
 
        T = Integer.parseInt(br.readLine().trim());
        StringBuilder sb = new StringBuilder();
    
        for (int t = 1; t <= T; t++) {
            Answer = INF;
            st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            M = Integer.parseInt(st.nextToken());
            K = Integer.parseInt(st.nextToken());
 
            digit = new int[N + 1][M + 1];
            ver = new ArrayList[N + 1];
            for (int n = 1; n <= N; n++) {
                ver[n] = new ArrayList<VER>();
                Arrays.fill(digit[n], INF);
            }
 
            for (int k = 0; k < K; k++) {
                st = new StringTokenizer(br.readLine());
                int u = Integer.parseInt(st.nextToken());
                int v = Integer.parseInt(st.nextToken());
                int c = Integer.parseInt(st.nextToken());
                int d = Integer.parseInt(st.nextToken());
 
                ver[u].add(new VER(v, c, d));
//                ver[v].add(new VER(u, c, d));
            }
            q = new PriorityQueue<>();
            digit[1][0= 0;
            q.add(new VER(100));
 
            while (!q.isEmpty()) {
                VER cur = q.poll();
                if (cur.u == N) {
                    Answer = Math.min(Answer, cur.d);
                    break;
                }
 
                for (VER next : ver[cur.u]) {
                    int sumc = cur.c + next.c;
                    if (sumc > M)
                        continue;
                    int sumd = cur.d + next.d;
                    if (digit[next.u][sumc] > sumd) {
                        digit[next.u][sumc] = sumd;
                        q.add(new VER(next.u, sumc, sumd));
                    }
 
                }
            }
 
            if (Answer == INF) {
                sb.append("Poor KCM\n");
            } else {
                sb.append(Answer+"\n");
            }
 
        }
        System.out.print(sb.toString());
 
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
반응형

'ProgramSoliving' 카테고리의 다른 글

백준 : 1086 JAVA  (0) 2020.03.14
백준 : 16946  (0) 2020.03.11
벨만포드 알고리즘 : 백준 11657 ( 타임머신)  (0) 2020.03.08
백준 : 1039 JAVA  (0) 2020.03.07
백준 : 9376  (0) 2020.03.04