//連結成分中の白黒の数を数えるだけ。 WAになってないとダメ #include #include #include using namespace std; int dx[] = {0,0,1,-1}; int dy[] = {1,-1,0,0}; int main(){ int n,m; cin >> n >> m; vector s(n); for(auto& x : s) cin >> x; vector> visit(n, vector(m, false)); int ans = 0; int b = 0, w = 0; for(int r=0; r q; q.push(r*m + c); visit[r][c] = true; int cnt_b = 0; int cnt_w = 0; while(q.size()){ int p = q.front(); q.pop(); int y = p/m; int x = p%m; cnt_b += s[y][x] == 'b'; cnt_w += s[y][x] == 'w'; for(int k__=0; k__<4; k__++){ int new_x = x + dx[k__]; int new_y = y + dy[k__]; if(new_x < 0 || new_x >= m || new_y < 0 || new_y >= n) continue; if(visit[new_y][new_x] || s[new_y][new_x] == '.') continue; visit[new_y][new_x] = true; q.push(new_y * m + new_x); } } int d = min(cnt_b, cnt_w); ans += d*100; b += cnt_b - d; w += cnt_w - d; } ans += min(b,w) * 10; ans += max(b,w) - min(b,w); cout << ans << endl; return 0; }