class Solution {
public:
int n, m;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
public:
bool dfs(int si, int sj, vector<vector<int>>& grid1, vector<vector<int>>& grid2)
{
grid2[si][sj] = 0;
bool flag = true;
for(int i = 0; i < 4; i++)
{
int x = si + dx[i], y = sj + dy[i];
if(x < 0 || x >= n || y < 0 || y >= m) continue;
if(grid2[x][y] == 0) continue;
if(grid1[x][y] == 0) flag = false;
if(!dfs(x, y, grid1, grid2)) flag = false;
}
return flag;
}
int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) {
n = grid1.size(), m = grid1[0].size();
int res = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
if(grid1[i][j] == 1 && grid2[i][j] == 1)
if(dfs(i, j, grid1, grid2)) res++;
return res;
}
};