답안 #1021522

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1021522 2024-07-12T19:09:15 Z stefanopulos Paint (COI20_paint) C++17
31 / 100
201 ms 71508 KB
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>
 
using namespace std;
using namespace __gnu_pbds;
 
typedef long long ll;
typedef long double ldb;
 
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ldb,ldb> pdd;

#define ff(i,a,b) for(int i = a; i <= b; i++)
#define fb(i,b,a) for(int i = b; i >= a; i--)
#define trav(a,x) for(auto& a : x)
 
#define sz(a) (int)(a).size()
#define fi first
#define se second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

// os.order_of_key(k) the number of elements in the os less than k
// *os.find_by_order(k)  print the k-th smallest number in os(0-based)

const int mod = 1000000007;
const int inf = 1e9 + 5;
const int mxN = 200005; 

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

int n, m, q;

int par[mxN];
int boja[mxN];
map<int,vector<int>> dt[mxN];
int findpar(int x){
    return (x == par[x] ? x : par[x] = findpar(par[x]));
}
void unite(int x, int y){
    x = findpar(x), y = findpar(y);
    if(x == y)return;
    if(sz(dt[x]) < sz(dt[y]))swap(x, y);

    for(auto c : dt[y]){
        for(auto f : c.se)dt[x][c.fi].pb(f);
    }

    par[y] = x;

}
void init(){
    ff(i,1,n * m){
        par[i] = i;
    }
}

int main(){
    cin.tie(0)->sync_with_stdio(0);

    cin >> n >> m;
    vector<vector<int>> mat(n + 1, vector<int>(m + 1));
    ff(i,1,n)ff(j,1,m)cin >> mat[i][j];

    init();

    ff(i,1,n){
        ff(j,1,m){
            boja[j + (i - 1) * m] = mat[i][j];

            ff(k,0,3){
                int x = i + dx[k];
                int y = j + dy[k];
                if(x >= 1 && x <= n && y >= 1 && y <= m){
                    int u = j + (i - 1) * m;
                    int v = y + (x - 1) * m;
                    
                    if(mat[i][j] != mat[x][y]){
                        dt[u][mat[x][y]].pb(v);
                        dt[v][mat[i][j]].pb(u);
                    }

                }
            }
        }
    }


    ff(i,1,n){
        ff(j,1,m){
            ff(k,0,3){
                int x = i + dx[k];
                int y = j + dy[k];
                if(x >= 1 && x <= n && y >= 1 && y <= m){
                    int u = j + (i - 1) * m;
                    int v = y + (x - 1) * m;
                    
                    if(mat[i][j] == mat[x][y]){
                        unite(u, v);
                    }

                }
            }
        }
    }

    cin >> q;
    while(q--){
        int x, y, z;
        cin >> x >> y >> z;
        
        int u = findpar(y + (x - 1) * m);
        if(dt[u].count(z)){

            for(auto c : dt[u][z]){
                if(boja[findpar(c)] == z)unite(u, c);
            }

            dt[findpar(u)][z].clear();
        }

        boja[findpar(u)] = z;

    }

    ff(i,1,n){
        ff(j,1,m)cout << boja[findpar(j + (i - 1) * m)] << " ";
        cout << '\n';
    }

    return 0;
}
/*



// probati bojenje sahovski
*/
 
 
 
 
 
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 10076 KB Output is correct
2 Correct 6 ms 10076 KB Output is correct
3 Incorrect 12 ms 14040 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 50 ms 22928 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 40656 KB Output is correct
2 Correct 136 ms 41672 KB Output is correct
3 Correct 118 ms 41040 KB Output is correct
4 Correct 140 ms 44200 KB Output is correct
5 Correct 109 ms 42064 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 201 ms 71508 KB Output isn't correct
2 Halted 0 ms 0 KB -