쵼쥬 2021. 12. 29. 20:41


내 코드

package com.company;

import java.io.*;
import java.util.*;

public class Main {
    static int T, n, d, c;
    static ArrayList<ArrayList<int[]>> list;
    static boolean[] check;


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        T = Integer.parseInt(br.readLine());
        for (int tc = 0; tc < T; tc++) {
            int count = 0;
            int gap = 0;

            StringTokenizer st = new StringTokenizer(br.readLine());
            n = Integer.parseInt(st.nextToken());
            d = Integer.parseInt(st.nextToken());
            c = Integer.parseInt(st.nextToken());

            check = new boolean[n + 1];
            list = new ArrayList<>();

            for (int i = 0; i <= n; i++) {
                list.add(new ArrayList<>());
            }

            for (int i = 0; i < d; i++) {
                st = new StringTokenizer(br.readLine());
                int a = Integer.parseInt(st.nextToken());
                int b = Integer.parseInt(st.nextToken());
                int s = Integer.parseInt(st.nextToken());

                list.get(b).add(new int[]{a, s});
            }

            Queue<Node> pq = new PriorityQueue<>();
            pq.add(new Node(c, 0));

            while (!pq.isEmpty()) {
                Node node = pq.poll();

                if (check[node.com])
                    continue;

                check[node.com] = true;
                count++;
                gap = Math.max(node.time, gap);

                for (int i = 0; i < list.get(node.com).size(); i++) {
                    int[] tmp = list.get(node.com).get(i);
                    if (!check[tmp[0]]) {
                        pq.add(new Node(tmp[0], node.time + tmp[1]));
                    }
                }
            }

            System.out.println(count + " " + gap);
        }
    }

    static class Node implements Comparable<Node> {
        int com, time;

        public Node(int com, int time) {
            this.com = com;
            this.time = time;
        }

        @Override
        public int compareTo(Node o) {
            return this.time - o.time;
        }
    }
}