#include <bits/stdc++.h>
using namespace std;
int dx[] = {-1, 0, 0, 1};
int dy[] = {0, 1, -1, 0};
int main() {
    int r, c;
    cin >> r >> c;
    vector<vector<char>> grid(r+2, vector<char>(c+2, '*'));
    for (int i = 1; i <= r; i++) {
        for (int j = 1; j <= c; j++) cin >> grid[i][j];
    }
    vector<vector<int>> comp(r+2, vector<int>(c+2, -1));
    vector<vector<bool>> visited(r+2, vector<bool>(c+2));
    int cur = 1;
    for (int i = 1; i <= r; i++) {
        for (int j = 1; j <= c; j++) {
            if (visited[i][j] || grid[i][j] == '*') continue;
            visited[i][j] = true;
            comp[i][j] = cur;
            queue<pair<int, int>> q;
            q.push({i, j});
            while (!q.empty()) {
                int x = q.front().first, y = q.front().second;
                q.pop();
                comp[x][y] = cur;
                for (int k = 0; k < 4; k++) {
                    if (!visited[x+dx[k]][y+dy[k]] && grid[x+dx[k]][y+dy[k]] == grid[x][y]) {
                        q.push({x+dx[k], y+dy[k]});
                        visited[x+dx[k]][y+dy[k]] = true;
                    }
                }
            }
            cur++;
        }
    }
    vector<set<int>> adj((r*c)+r+c);
    for (int i = 1; i <= r; i++) {
        for (int j = 1; j <= c; j++) {
            if (comp[i][j] == -1) continue;
            for (int k = 0; k < 4; k++) {
                if (comp[i+dx[k]][j+dy[k]] != -1 && comp[i+dx[k]][j+dy[k]] != comp[i][j]) 
                    adj[comp[i][j]].insert(comp[i+dx[k]][j+dy[k]]);
            }
        }
    }
    int ans = 0;
    queue<int> q;
    q.push(comp[1][1]);
    vector<bool> v(cur);
    v[comp[1][1]] = true;
    while (!q.empty()) {
        int cur = q.front();
        q.pop();
        ans++;
        for (auto e : adj[cur]) {
            if (!v[e]) {
                q.push(e);
                v[e] = true;
            }
        }
    }
    cout << ans << '\n';
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |