Submission

Status:

[PP-SSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: tnka4_

Problemset: fireball

Language: cpp

Time: 0.003 second

Submitted On: 2026-03-10 09:22:10

#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));
    //vector<vector<int>> visited(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;
    for (int k=0; k<n; k++) {
        cin >> start.first >> start.second;
        start.first--; start.second--;
        queue<pair<int,int>> q;
        q.push(start);
        while (!q.empty()) {
            pair<int,int> c = q.front();
            q.pop();
            if (grid[c.first][c.second] == 1) {
                grid[c.first][c.second] = 2;
                rem--;
            } else {
                goto skip;
            }
            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);
                }
            }
        }
        skip:
        cout << rem << endl;
    }
}