Submission

Status:
[PPPPPPPPPPPPPPPPPPPPPPPPP]

Score: 100

User: Dormon

Problemset: เกาะที่ใหญ่ที่สุด

Language: cpp

Time: 0.002 second

Submitted On: 2025-03-26 12:36:03

#include <iostream>
#include <vector>
#include <queue>
#include <functional>

using namespace std;

vector<pair<int, int>> dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n, m;
    cin >> n >> m;

    vector<string> grid(n);

    for (auto &s:grid)
        cin >> s;

    auto invalid = [&](int i, int j) -> bool {
        return i < 0 || i >= n || j < 0 || j >= m || grid[i][j] == '0';
    };

    int ans = 0;

    for (int i = 0;i < n;i++){
        for (int j = 0;j < m;j++){
            if (grid[i][j] == '1'){
                int res = 0;
                queue<pair<int, int>> q;
                q.push({i, j});
                while (!q.empty()){
                    auto [ii, jj] = q.front(); q.pop();
                    if (grid[ii][jj] == '0') continue;
                    grid[ii][jj] = '0';
                    res++;
                    for (auto [di, dj]:dir){
                        if (invalid(ii + di, jj + dj)) continue;
                        q.push({ii + di, jj + dj});
                    } 
                }
                ans = max(ans, res);
            }
        }
    }
    cout << ans << '\n';
}