제출 #1126740

#제출 시각아이디문제언어결과실행 시간메모리
1126740Zero_OPPaint (COI20_paint)C++17
8 / 100
3094 ms5172 KiB
#include <bits/stdc++.h>

using namespace std;

int R, C, n;
vector<vector<int>> cl, id;
vector<vector<bool>> vis;

const int dx[4] = {-1, 1, 0, 0};
const int dy[4] = {0, 0, 1, -1};

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

#ifdef LOCAL
    freopen("task.inp", "r", stdin);
    freopen("task.out", "w", stdout);
#endif // LOCAL

    cin >> R >> C;

    cl.resize(R, vector<int>(C));
    id.resize(R, vector<int>(C));
    n = 0;

    for(int i = 0; i < R; ++i){
        for(int j = 0; j < C; ++j){
            cin >> cl[i][j];
            id[i][j] = n++;
        }
    }

    vis.resize(R, vector<bool>(C, false));

    int Q; cin >> Q;

    while(Q--){
        int r, c, new_cl;
        cin >> r >> c >> new_cl;
        --r, --c;

        int old = cl[r][c];

        vector<pair<int, int>> changed;
        queue<pair<int, int>> q;
        q.push({r, c});
        vis[r][c] = true;

        while(!q.empty()){
            int r, c; tie(r, c) = q.front(); q.pop();
            changed.emplace_back(r, c);
            for(int i = 0; i < 4; ++i){
                int nr = r + dx[i], nc = c + dy[i];
                if(0 <= nr && nr < R && 0 <= nc && nc < C && !vis[nr][nc] && cl[nr][nc] == old){
                    vis[nr][nc] = true;
                    q.push({nr, nc});
                }
            }
        }

        for(auto [r, c] : changed){
            cl[r][c] = new_cl;
            vis[r][c] = false;
        }
    }

    for(int i = 0; i < R; ++i){
        for(int j = 0; j < C; ++j){
            cout << cl[i][j] << ' ';
        }
        cout << '\n';
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...