#include #include #include using namespace std; bool check_sibling(int index, int d_row, int d_col, vector& table, vector& colors) { int n = table.size(); int m = table[0].size(); int row = index / m; int col = index % m; int s_row = row + d_row; int s_col = col + d_col; int s_index = s_row * m + s_col; if (0 <= s_row && s_row < n && 0 <= s_col && s_col < m && table[s_row][s_col] == '#' && colors[s_index] == 0) { return true; } return false; } void dfs(int v, vector& colors, vector& table) { colors[v] = 1; int m = table[0].size(); if (check_sibling(v, -1, 0, table, colors)) { dfs(v - m, colors, table); } if (check_sibling(v, 1, 0, table, colors)) { dfs(v + m, colors, table); } if (check_sibling(v, 0, -1, table, colors)) { dfs(v - 1, colors, table); } if (check_sibling(v, 0, 1, table, colors)) { dfs(v + 1, colors, table); } colors[v] = 2; } int main() { int n, m; cin >> n >> m; vector table(n); for (string& row : table) { cin >> row; } vector colors(n * m); int ans = 0; for (int index = 0; index < n * m; index++) { int row = index / m; int col = index % m; if (table[row][col] == '#' && colors[index] == 0) { dfs(index, colors, table); ans++; } } cout << ans; return 0; }