import java.util.*;
class Solution {
public int findCircleNum(int[][] isConnected) {
int n = isConnected.length;
List<List<Integer>> adjList = new ArrayList<>();
for (int i = 0; i <= n; i++) adjList.add(new ArrayList<>());
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (isConnected[i][j] == 1) {
adjList.get(i + 1).add(j + 1);
adjList.get(j + 1).add(i + 1);
}
}
}
boolean[] visited = new boolean[n + 1];
int provinceCount = 0;
for (int node = 1; node <= n; node++) {
if (!visited[node]) {
provinceCount++;
dfs(node, adjList, visited);
}
}
return provinceCount;
}
private void dfs(int node, List<List<Integer>> adjList, boolean[] visited) {
visited[node] = true;
for (int neighbor : adjList.get(node)) {
if (!visited[neighbor]) {
dfs(neighbor, adjList, visited);
}
}
}
}