結果
| 問題 | 
                            No.697 池の数はいくつか
                             | 
                    
| ユーザー | 
                             | 
                    
| 提出日時 | 2023-03-31 14:22:28 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                MLE
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,601 bytes | 
| コンパイル時間 | 931 ms | 
| コンパイル使用メモリ | 89,404 KB | 
| 最終ジャッジ日時 | 2025-02-11 19:33:42 | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 1 MLE * 2 | 
| other | AC * 5 TLE * 3 MLE * 24 | 
ソースコード
#include<iostream>
#include<vector>
#include<stack>
int main() {
    int H, W;
    std::cin >> H >> W;
    std::vector<std::vector<int>> A(H, std::vector<int>(W));
    for (int h = 0; h < H; ++h) {
        for (int w = 0; w < W; ++w) {
            std::cin >> A.at(h).at(w);
        }
    }
    const std::vector<std::pair<int, int>> dhw = {{0,  1},
                                                  {1,  0},
                                                  {0,  -1},
                                                  {-1, 0}};
    std::vector<std::vector<bool>> nonvisited(H, std::vector<bool>(W, true));
    int ans = 0;
    for (int h0 = 0; h0 < H; ++h0) {
        for (int w0 = 0; w0 < W; ++w0) {
            if (A.at(h0).at(w0) && nonvisited.at(h0).at(w0)) {
                ans++;
                std::stack<std::pair<int, int>> stk;
                stk.emplace(h0, w0);
                while (!stk.empty()) {
                    const auto [h, w] = stk.top();
                    stk.pop();
                    for (const auto &[dh, dw]: dhw) {
                        const int hdh = h + dh;
                        const int wdw = w + dw;
                        if (0 <= hdh
                            && hdh < H
                            && 0 <= wdw
                            && wdw < W
                            && A.at(hdh).at(wdw)
                            && nonvisited.at(hdh).at(wdw)) {
                            stk.emplace(hdh, wdw);
                        }
                    }
                }
            }
        }
    }
    std::cout << ans << std::endl;
}