diff --git "a/khj20006/202502/04 BOJ P3 \355\212\270\353\246\254\354\231\200 \354\277\274\353\246\254 2.md" "b/khj20006/202502/04 BOJ P3 \355\212\270\353\246\254\354\231\200 \354\277\274\353\246\254 2.md" new file mode 100644 index 00000000..95f164a1 --- /dev/null +++ "b/khj20006/202502/04 BOJ P3 \355\212\270\353\246\254\354\231\200 \354\277\274\353\246\254 2.md" @@ -0,0 +1,154 @@ +```java + +import java.util.*; +import java.io.*; + +class Main { + + // IO field + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + + static void nextLine() throws Exception {st = new StringTokenizer(br.readLine());} + static int nextInt() {return Integer.parseInt(st.nextToken());} + static long nextLong() {return Long.parseLong(st.nextToken());} + static void bwEnd() throws Exception {bw.flush();bw.close();} + + // Additional field + static int N; + static int[] dep; + static int[][] par; + static long[][] dist; + static int[][] cnt; + static List[] V; + + static void initialize() { + + V = new ArrayList[N+1]; + dep = new int[N+1]; + for(int i=1;i<=N;i++) V[i] = new ArrayList<>(); + par = new int[N+1][18]; + dist = new long[N+1][18]; + cnt = new int[N+1][18]; + + } + + static void input() throws Exception { + + N = Integer.parseInt(br.readLine()); + initialize(); + + for(int i=1;i dep[v]) { + int diff = dep[u] - dep[v]; + for(int i=0;i<18;i++) if((diff & (1<=0;i--) { + if(par[u][i] != par[v][i]) { + u = par[u][i]; + v = par[v][i]; + break; + } + } + } + + if(u != v) u = par[u][0]; + return u; + + } + + static long query1(int u, int v) { + + long res = 0; + int g = lca(u,v); + int diff1 = dep[u] - dep[g], diff2 = dep[v] - dep[g]; + for(int i=0;i<18;i++) { + if((diff1 & (1< 0) { + nextLine(); + int o = nextInt(), u = nextInt(), v = nextInt(); + if(o == 1) bw.write(query1(u,v)+"\n"); + else { + int k = nextInt(); + bw.write(query2(u,v,k)+"\n"); + } + } + } + + public static void main(String[] args) throws Exception { + + input(); + dfs(1,0,0); + constructSparseTable(); + handleQuery(); + + bwEnd(); + } + +} + +```