Submission

Status:

[PPPPPPPPPPPPPPP]

Score: 100

User: Dormon

Problemset: fireball

Language: cpp

Time: 0.003 second

Submitted On: 2025-05-21 11:45:32

#include <bits/stdc++.h>
using namespace std;

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

int main() 
{
    int n, m, q;
    cin >> n >> m >> q;
    vector<vector<int>> grid(n + 2, vector<int>(m + 2));
    int cnt = 0;
    
    for (int i = 1;i <= n;i++){
        for (int j = 1;j <= m;j++){
            cin >> grid[i][j];
            cnt += grid[i][j];
        }
    }
    
    auto invalid = [&](int i, int j) -> bool {
        return i < 1 || i > n || j < 1 || j > m || grid[i][j] == 0;
    };
    
    auto bfs = [&](int a, int b) -> int {
        int res = 0;
        queue<pair<int, int>> q;
        q.push({a, b});
        while (!q.empty()){
            auto [i, j] = q.front(); q.pop();
            if (grid[i][j] == 0) continue;
            grid[i][j] = 0;
            res++;
            for (auto [di, dj]:dir){
                if (invalid(i + di, j + dj)) continue;
                q.push({i + di, j + dj});
            }
        }
        return res;
    };
    
    while (q--){
        int a, b;
        cin >> a >> b;
        cnt -= bfs(a, b);
        cout << cnt << '\n';
    }
    
    return 0;
}