From 1b8b9f8fc6abcd01567eb15513f660d079f4226d Mon Sep 17 00:00:00 2001 From: dpfls0922 <dpfls0922@naver.com> Date: Mon, 10 Mar 2025 10:56:41 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=EC=83=81=EA=B7=BC=EC=9D=B4=EC=9D=98=20?= =?UTF-8?q?=EC=97=AC=ED=96=89=5F9372.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06_mst/lee/9372.java | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 06_mst/lee/9372.java diff --git a/06_mst/lee/9372.java b/06_mst/lee/9372.java new file mode 100644 index 0000000..34f11e8 --- /dev/null +++ b/06_mst/lee/9372.java @@ -0,0 +1,74 @@ +import java.io.*; +import java.util.*; + +public class Main { + private static int N, M; + private static boolean[] visited; + private static ArrayList<Integer>[] plane; + + public static void main(String[] args) throws NumberFormatException, IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringBuilder sb = new StringBuilder(); + + int T = Integer.parseInt(br.readLine()); + + for (int tc = 1; tc <= T; tc++) { + + StringTokenizer st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + plane = new ArrayList[N + 1]; + for (int i = 1; i <= N; i++) { + plane[i] = new ArrayList<Integer>(); + } + + for (int i = 1; i <= M; i++) { + st = new StringTokenizer(br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + + plane[a].add(b); + plane[b].add(a); + } + + visited = new boolean[N + 1]; + sb.append(dfs(1)).append("\n"); // 방법 1 + sb.append(bfs(1) - 1).append("\n"); // 방법 2 + sb.append((N - 1)).append("\n"); // 방법 3 (최소 신장 트리의 성질 : 간선의 개수 == 정점의 개수 - 1) + } + System.out.println(sb.toString()); + } + + private static int dfs(int start) { + visited[start] = true; + + int count = 0; + for (int destination : plane[start]) { + if (!visited[destination]) { + count += dfs(destination) + 1; + } + } + return count; + } + + private static int bfs(int start) { + ArrayDeque<Integer> queue = new ArrayDeque<>(); + queue.add(start); + visited[start] = true; + + int count = 0; + while (!queue.isEmpty()) { + count++; + int current = queue.poll(); + + for (int destination : plane[current]) { + if (!visited[destination]) { + visited[destination] = true; + queue.add(destination); + } + } + } + return count; + } +} From 74032a5b098062c43fdb0d27ea78b640ad79eda2 Mon Sep 17 00:00:00 2001 From: dpfls0922 <dpfls0922@naver.com> Date: Mon, 10 Mar 2025 10:57:29 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=EC=B5=9C=EC=86=8C=20=EC=8A=A4=ED=8C=A8?= =?UTF-8?q?=EB=8B=9D=20=ED=8A=B8=EB=A6=AC=5F1197.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06_mst/lee/1197.java | 68 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 06_mst/lee/1197.java diff --git a/06_mst/lee/1197.java b/06_mst/lee/1197.java new file mode 100644 index 0000000..7f8312c --- /dev/null +++ b/06_mst/lee/1197.java @@ -0,0 +1,68 @@ +import java.io.*; +import java.util.*; + +public class Main { + static class Edge { + int to; + int weight; + + Edge(int to, int weight) { + this.to = to; + this.weight = weight; + } + } + + private static int V, E; + private static List<Edge>[] edges; + private static boolean[] visited; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + V = Integer.parseInt(st.nextToken()); + E = Integer.parseInt(st.nextToken()); + + edges = new List[V + 1]; + for (int i = 1; i <= V; i++) { + edges[i] = new ArrayList<>(); + } + for (int i = 0; i < E; i++) { + st = new StringTokenizer(br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + int c = Integer.parseInt(st.nextToken()); + edges[a].add(new Edge(b, c)); + edges[b].add(new Edge(a, c)); + } + + System.out.println(prim(1)); + } + + + private static int prim(int start) { + int totalWeight = 0; + visited = new boolean[V + 1]; + PriorityQueue<Edge> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a.weight)); + + pq.add(new Edge(1, 0)); + + while (!pq.isEmpty()) { + Edge current = pq.poll(); + int node = current.to; + int weight = current.weight; + + if (visited[node]) continue; + + visited[node] = true; + totalWeight += weight; + + for (Edge neighbor : edges[node]) { + if (!visited[neighbor.to]) { + pq.add(neighbor); + } + } + } + return totalWeight; + } +} From 9bd10e41581e06f44756d62bd6781aa4de99a84d Mon Sep 17 00:00:00 2001 From: dpfls0922 <dpfls0922@naver.com> Date: Tue, 11 Mar 2025 11:52:29 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=ED=96=89=EC=84=B1=20=EC=97=B0=EA=B2=B0=5F1?= =?UTF-8?q?6398.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06_mst/lee/16398.java | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 06_mst/lee/16398.java diff --git a/06_mst/lee/16398.java b/06_mst/lee/16398.java new file mode 100644 index 0000000..925ed55 --- /dev/null +++ b/06_mst/lee/16398.java @@ -0,0 +1,61 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Edge { + int to; + int weight; + + Edge(int to, int weight) { + this.to = to; + this.weight = weight; + } + } + + private static int N; + private static int[][] planet; + private static boolean[] inMST; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + N = Integer.parseInt(br.readLine()); + planet = new int[N + 1][N + 1]; + for (int i = 1; i <= N; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int j = 1; j <= N; j++) { + planet[i][j] = Integer.parseInt(st.nextToken()); + } + } + + System.out.println(prim(1)); + } + + + private static long prim(int start) { + long totalWeight = 0; + inMST = new boolean[N + 1]; + PriorityQueue<Edge> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a.weight)); + + pq.add(new Edge(1, 0)); + + while (!pq.isEmpty()) { + Edge current = pq.poll(); + int node = current.to; + int weight = current.weight; + + if (inMST[node]) continue; + + inMST[node] = true; + totalWeight += weight; + + for (int i = 1; i <= N; i++) { + if (!inMST[i]) { + pq.add(new Edge(i, planet[node][i])); + } + } + } + return totalWeight; + } +} From 9ae65b77f9c8394e6ed76410bcd4528d55f951e6 Mon Sep 17 00:00:00 2001 From: dpfls0922 <dpfls0922@sookmyung.ac.kr> Date: Wed, 12 Mar 2025 08:44:39 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EB=8F=84=EC=8B=9C=20=EB=B6=84=ED=95=A0=20?= =?UTF-8?q?=EA=B3=84=ED=9A=8D=5F1647.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06_mst/lee/1647.java | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 06_mst/lee/1647.java diff --git a/06_mst/lee/1647.java b/06_mst/lee/1647.java new file mode 100644 index 0000000..c64e845 --- /dev/null +++ b/06_mst/lee/1647.java @@ -0,0 +1,67 @@ +import java.io.*; +import java.util.*; + +public class Main { + static class Edge { + int to; + int weight; + + public Edge(int to, int weight) { + this.to = to; + this.weight = weight; + } + } + + static int N, M; + static ArrayList<Edge>[] cities; + private static boolean[] visited; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + cities = new ArrayList[N + 1]; + for (int i = 1; i <= N; i++) { + cities[i] = new ArrayList<>(); + } + for (int i = 1; i <= M; i++) { + st = new StringTokenizer(br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + int c = Integer.parseInt(st.nextToken()); + cities[a].add(new Edge(b, c)); + cities[b].add(new Edge(a, c)); + } + System.out.println(prim()); + } + + private static int prim() { + int totalWeight = 0; + int maxWeight = 0; + visited = new boolean[N + 1]; + PriorityQueue<Edge> pq = new PriorityQueue<>((a, b) -> a.weight - b.weight); + + pq.add(new Edge(1, 0)); + + while (!pq.isEmpty()) { + Edge current = pq.poll(); + int node = current.to; + int weight = current.weight; + + if (visited[node]) continue; + + visited[node] = true; + totalWeight += weight; + maxWeight = Math.max(maxWeight, weight); + + for (Edge neighbor : cities[node]) { + if (!visited[neighbor.to]) { + pq.add(neighbor); + } + } + } + return totalWeight - maxWeight; + } +} \ No newline at end of file From 58d2543dd3e54452c74a52047637f3b9e274450a Mon Sep 17 00:00:00 2001 From: dpfls0922 <dpfls0922@naver.com> Date: Wed, 12 Mar 2025 23:59:26 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=EC=A0=84=EA=B8=B0=EA=B0=80=20=EB=B6=80?= =?UTF-8?q?=EC=A1=B1=ED=95=B4=5F10423.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06_mst/lee/Main.java | 72 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 06_mst/lee/Main.java diff --git a/06_mst/lee/Main.java b/06_mst/lee/Main.java new file mode 100644 index 0000000..a60adba --- /dev/null +++ b/06_mst/lee/Main.java @@ -0,0 +1,72 @@ +import java.io.*; +import java.util.*; + +public class Main { + static class Edge { + int to; + int weight; + + public Edge(int to, int weight) { + this.to = to; + this.weight = weight; + } + } + + static int N, M, K; + static ArrayList<Edge>[] powerStations; + static boolean[] visited; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + + powerStations = new ArrayList[N + 1]; + for (int i = 0; i <= N; i++) { + powerStations[i] = new ArrayList<>(); + } + st = new StringTokenizer(br.readLine()); + for (int i = 0; i < K; i++) { + int num = Integer.parseInt(st.nextToken()); + powerStations[0].add(new Edge(num, 0)); + powerStations[num].add(new Edge(0, 0)); + } + for (int i = 1; i <= M; i++) { + st = new StringTokenizer(br.readLine()); + int u = Integer.parseInt(st.nextToken()); + int v = Integer.parseInt(st.nextToken()); + int w = Integer.parseInt(st.nextToken()); + powerStations[u].add(new Edge(v, w)); + powerStations[v].add(new Edge(u, w)); + } + System.out.println(prim()); + } + + private static int prim() { + int totalWeight = 0; + visited = new boolean[N + 1]; + PriorityQueue<Edge> pq = new PriorityQueue<>((a, b) -> a.weight - b.weight); + pq.add(new Edge(1, 0)); + + while (!pq.isEmpty()) { + Edge current = pq.poll(); + int node = current.to; + int weight = current.weight; + + if (visited[node]) continue; + + visited[node] = true; + totalWeight += weight; + + for (Edge neighbor : powerStations[node]) { + if (!visited[neighbor.to]) { + pq.add(neighbor); + } + } + } + return totalWeight; + } +} \ No newline at end of file From f075763e56331f64444a02542d5c971fa08a889c Mon Sep 17 00:00:00 2001 From: dpfls0922 <dpfls0922@naver.com> Date: Thu, 13 Mar 2025 00:00:58 +0900 Subject: [PATCH 6/6] =?UTF-8?q?chore:=20[10423]=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06_mst/lee/{Main.java => 10423.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 06_mst/lee/{Main.java => 10423.java} (100%) diff --git a/06_mst/lee/Main.java b/06_mst/lee/10423.java similarity index 100% rename from 06_mst/lee/Main.java rename to 06_mst/lee/10423.java