From 3fb75cf088932c9b8bd1037acbd88b8c39b94106 Mon Sep 17 00:00:00 2001 From: kkunkka Date: Wed, 24 Sep 2025 14:13:11 +0800 Subject: [PATCH] kk --- .../java/com/dota/graph/_2316/Solution.java | 39 +++++++++++++++++++ .../com/dota/gridGraph/_1559/Solution.java | 37 ++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 src/main/java/com/dota/graph/_2316/Solution.java create mode 100644 src/main/java/com/dota/gridGraph/_1559/Solution.java diff --git a/src/main/java/com/dota/graph/_2316/Solution.java b/src/main/java/com/dota/graph/_2316/Solution.java new file mode 100644 index 0000000..da6b613 --- /dev/null +++ b/src/main/java/com/dota/graph/_2316/Solution.java @@ -0,0 +1,39 @@ +package com.dota.graph._2316; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +class Solution { + public long countPairs(int n, int[][] edges) { + List[] g = new ArrayList[n]; + Arrays.setAll(g, i -> new ArrayList<>()); + for (int[] edge : edges) { + g[edge[0]].add(edge[1]); + g[edge[1]].add(edge[0]); + } + + var vis = new boolean[n]; + long res = 0; + int sum = 0; + for (int i = 0; i < g.length; i++) { + if (!vis[i]) { + int size = dfs(i, vis, g); + res += (long)size * sum; + sum += size; + } + } + return res; + } + + int dfs(int i, boolean[] visited, List[] arr) { + visited[i] = true; + int size = 1; + for (Integer integer : arr[i]) { + if (!visited[integer]) { + size += dfs(integer, visited, arr); + } + } + return size; + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/gridGraph/_1559/Solution.java b/src/main/java/com/dota/gridGraph/_1559/Solution.java new file mode 100644 index 0000000..bede653 --- /dev/null +++ b/src/main/java/com/dota/gridGraph/_1559/Solution.java @@ -0,0 +1,37 @@ +package com.dota.gridGraph._1559; + +class Solution { + public boolean containsCycle(char[][] grid) { + int n = grid.length; + int m = grid[0].length; + var book = new int[n][m]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (book[i][j] == 0) { + var res = df(i, j, i, j, grid[i][j], book, 0, grid); + if (res) { + return true; + } + } + } + } + return false; + } + + boolean df(int i, int j, int x, int y, char c, int[][] book, int step, char[][] chars) { + if (i < 0 || j < 0 || i >= book.length || j >= book[i].length || c != chars[i][j]) { + return false; + } + + if (book[i][j] == 0) { + step++; + book[i][j] = step; + return df(i + 1, j, i, j, c, book, step, chars) || + df(i - 1, j, i, j, c, book, step, chars) || + df(i, j + 1, i, j, c, book, step, chars) || + df(i, j - 1, i, j, c, book, step, chars); + } + + return book[x][y] - book[i][j] > 2; + } +} \ No newline at end of file