From eeefe359e408c8f0c94f7cf531199e1e0bda0c9a Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:05:37 +0900 Subject: [PATCH] =?UTF-8?q?[20260326]=20BOJ=20/=20G5=20/=20=EA=B7=80?= =?UTF-8?q?=EC=B0=AE=EC=9D=80=20=ED=95=B4=EA=B0=95=EC=9D=B4=20/=20?= =?UTF-8?q?=EC=9D=B4=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0 \355\225\264\352\260\225\354\235\264.md" | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 "LiiNi-coder/202603/26 BOJ \352\267\200\354\260\256\354\235\200 \355\225\264\352\260\225\354\235\264.md" diff --git "a/LiiNi-coder/202603/26 BOJ \352\267\200\354\260\256\354\235\200 \355\225\264\352\260\225\354\235\264.md" "b/LiiNi-coder/202603/26 BOJ \352\267\200\354\260\256\354\235\200 \355\225\264\352\260\225\354\235\264.md" new file mode 100644 index 00000000..57aa6ce0 --- /dev/null +++ "b/LiiNi-coder/202603/26 BOJ \352\267\200\354\260\256\354\235\200 \355\225\264\352\260\225\354\235\264.md" @@ -0,0 +1,78 @@ +```java +import java.util.*; +import java.io.*; + +public class Main{ + static int N, M; + static int[] Order; + static class UF{ + int[] roots; + int[] sizes; + UF(int n){ + roots = new int[n]; + sizes = new int[n]; + for(int i = 0; i < n; i++){ + roots[i] = i; + sizes[i] = 1; + } + } + int getRoot(int target){ + while(true){ + int temp = roots[target]; + if(temp == target) + return temp; + target = temp; + } + + } + void union(int a1, int a2){ + int r1 = getRoot(a1); + int r2 = getRoot(a2); + if(r1 == r2) return; + if(sizes[r1] >= sizes[r2]){ + roots[r2] = r1; + sizes[r1] += sizes[r2]; + }else{ + roots[r1] = r2; + sizes[r2] += sizes[r1]; + } + } + boolean connected(int a1, int a2){ + return getRoot(a1) == getRoot(a2); + + } + } + + public static void main(String[] args) throws IOException{ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + Order = new int[N]; + UF uf = new UF(N); + for(int m = 0; m < M; m++){ + st = new StringTokenizer(br.readLine()); + int a1 = Integer.parseInt(st.nextToken()) - 1; + int a2= Integer.parseInt(st.nextToken())-1; + uf.union(a1, a2); + + } + st = new StringTokenizer(br.readLine()); + int prev = Integer.parseInt(st.nextToken())-1; + int prevRoot = uf.getRoot(prev); + int answer = 0; + // System.out.println("DEBUG: "); + while(st.hasMoreTokens()){ + // System.out.println("DEBUG: "); + int now = Integer.parseInt(st.nextToken())-1; + int nowRoot = uf.getRoot(now); + if(prevRoot != nowRoot) + answer++; + prev = now; + prevRoot = nowRoot; + } + System.out.println(answer); + br.close(); + } +} +```