왜안되는지진짜 겁내모르겠음 ;;

하루종일했는데도

 

테스트케이스 다맞음

13%에서 틀렸습니다 뜨는데 아는사람

package ShortestRoot;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class boj_1753 {
    static int V;
    static int K;
    static ArrayList<Edge>[] graph;
    static boolean[] visited;
    static PriorityQueue<Edge> pq;
    static int[] dist;

    static class Edge implements Comparable<Edge>{
        int node;
        int line;
        public Edge(int node, int line) {
            this.node = node;
            this.line = line;
        }

        @Override
        public int compareTo(Edge e) {
            return this.line - e.line;
        }
    }

    static void goTo() {
        while (!pq.isEmpty() && visited[pq.peek().node]) pq.poll();
        if (pq.isEmpty()) return;
        Edge edge = pq.poll();
//        System.out.println("현재 노드: [node]"+(edge.node+1)+", [line]"+edge.line);
        for (Edge e : graph[edge.node]) {
            if (visited[e.node]) continue;
//            System.out.println("현재 노드와 연결된: [node]"+(e.node+1)+", [line]"+e.line);
//            System.out.println("dist[edge.node]"+dist[edge.node]);
//            System.out.println("e.line"+e.line);
            int currentW = dist[edge.node] + e.line;
//            System.out.println("[currentW]"+currentW);
            if (currentW < dist[e.node]) {
//                System.out.println("값이 변하였습니다! 원래 값: "+dist[e.node]);
                dist[e.node] = currentW;
//                System.out.println("변한 값: " + dist[e.node]);
            }

            pq.add(e);
        }
        visited[edge.node] = true;

        while (!pq.isEmpty() && visited[pq.peek().node]) pq.poll();
        if (!pq.isEmpty()) goTo();
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());

        V = Integer.parseInt(st.nextToken());
        int E = Integer.parseInt(st.nextToken());
        pq = new PriorityQueue<>();
        visited = new boolean[V];
        dist = new int[V];
        Arrays.fill(dist, Integer.MAX_VALUE);
        graph = new ArrayList[V];
        for (int i=0; i<V; i++) graph[i] = new ArrayList<>();

        K = Integer.parseInt(br.readLine()) - 1;

        for (int i=0; i<E; i++) {
            st = new StringTokenizer(br.readLine());
            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());
            int w = Integer.parseInt(st.nextToken());
            if (v > V) continue;
            Edge edge = new Edge(v-1, w);
            graph[u-1].add(edge);

            if (u-1==K) {
                pq.add(edge);
                dist[v-1] = w;
            }
        }

        visited[K] = true;
        dist[K] = 0;
        if (!pq.isEmpty()) goTo();

        for (int i=0; i<V; i++) {
            if (dist[i] == Integer.MAX_VALUE) bw.write("INF\n");
            else bw.write(dist[i]+"\n");
        }

        bw.flush();
        bw.close();

        br.close();
    }
}

 

+ Recent posts