Submission

Status:

[PP-SSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: tnka4_

Problemset: fireball

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-10 10:52:51

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

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

bool isInside(pair<int, int> p) {
    if (p.first >= 0 && p.first < y && p.second >= 0 && p.second < x) return true;
    return false;
}

int main() {
    cin >> y >> x >> n;
    vector<vector<int>> grid(y, vector<int>(x, 0));
    int rem = 0;
    for (int i=0; i<y; i++) {
        for (int j=0; j<x; j++) {
            cin >> grid[i][j];
            if (grid[i][j] == 1) rem++;
        }
    }
    pair<int, int> start;
    vector<int> remVec;
    for (int k=0; k<n; k++) {
        cin >> start.first >> start.second;
        start.first--; start.second--;
        if (grid[start.first][start.second] != 1) {
            remVec.push_back(rem);
            continue;
        }
        queue<pair<int,int>> q;
        q.push(start);
        while (!q.empty()) {
            pair<int,int> c = q.front();
            q.pop();
            grid[c.first][c.second] = 2;
            rem--;
            for (auto d : dir) {
                pair<int, int> n;
                n.first = c.first + d.first;
                n.second = c.second + d.second;
                if (isInside(n) && grid[n.first][n.second] == 1) {
                    q.push(n);
                }
            }
        }
        remVec.push_back(rem);
    }
    for (int r : remVec) {
        cout << r << endl;
    }
}