From c6368ca52115b12dace72b18f80ae6b303471efb Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Sat, 12 Jul 2025 16:16:38 +0900 Subject: [PATCH] =?UTF-8?q?[20250712]=20BOJ=20/=20G2=20/=20=ED=95=A0?= =?UTF-8?q?=EB=A1=9C=EC=9C=88=EC=9D=98=20=EC=96=91=EC=95=84=EC=B9=98=20/?= =?UTF-8?q?=20=EC=9D=B4=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0 \354\226\221\354\225\204\354\271\230.md" | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 "lkhyun/202507/12 BOJ G2 \355\225\240\353\241\234\354\234\210\354\235\230 \354\226\221\354\225\204\354\271\230.md" diff --git "a/lkhyun/202507/12 BOJ G2 \355\225\240\353\241\234\354\234\210\354\235\230 \354\226\221\354\225\204\354\271\230.md" "b/lkhyun/202507/12 BOJ G2 \355\225\240\353\241\234\354\234\210\354\235\230 \354\226\221\354\225\204\354\271\230.md" new file mode 100644 index 00000000..4f71deb6 --- /dev/null +++ "b/lkhyun/202507/12 BOJ G2 \355\225\240\353\241\234\354\234\210\354\235\230 \354\226\221\354\225\204\354\271\230.md" @@ -0,0 +1,72 @@ +```java +import java.util.*; +import java.io.*; + +public class Main{ + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + static int N,M,K; + static int[] candies; + static List[] friends; + static int[] dp; + + public static void main(String[] args) throws Exception{ + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + candies = new int[N+1]; + friends = new List[N+1]; + dp = new int[K]; + + st = new StringTokenizer(br.readLine()); + for (int i = 1; i <= N; i++) { + candies[i] = Integer.parseInt(st.nextToken()); + friends[i] = new ArrayList<>(); + } + + for (int i = 1; i <= M; i++) { + st = new StringTokenizer(br.readLine()); + int u = Integer.parseInt(st.nextToken()); + int v = Integer.parseInt(st.nextToken()); + friends[u].add(v); + friends[v].add(u); + } + + boolean[] visited = new boolean[N+1]; + for (int i = 1; i <= N; i++) { + if(visited[i]) continue; + int childCnt = 0; + int candyCnt = 0; + + ArrayDeque q = new ArrayDeque<>(); + q.add(i); + visited[i] = true; + while (!q.isEmpty()) { + int u = q.poll(); + childCnt++; + candyCnt += candies[u]; + for (int v : friends[u]) { + if(!visited[v]) { + q.add(v); + visited[v] = true; + } + } + } + + for (int j = K-1; j >= childCnt; j--) { + dp[j] = Math.max(dp[j],dp[j-childCnt] + candyCnt); + } + } + + int maxCnt = 0; + for (int i = 0; i < K; i++) { + maxCnt = Math.max(maxCnt, dp[i]); + } + bw.write(maxCnt + ""); + + bw.close(); + } +} +```