#include #include #include #include #include #include #include #include #include #include using namespace std; int dx[] = {0,0,1,-1,0,0}; int* dy = dx+2; int bfs(vector>& A, int r, int c, int x){ int h = A.size(); int w = A[0].size(); int tmp = A[r][c]; int ret = 1; queue q; q.push(r*w+c); A[r][c] = x; while(q.size()){ int pos = q.front(); q.pop(); r = pos/w; c = pos%w; for(int k=0; k<4; k++){ int r_ = r + dy[k]; int c_ = c + dx[k]; if(r_<0 || r_>=h || c_<0 || c_>=w) continue; if(A[r_][c_] != tmp) continue; A[r_][c_] = x; ret++; q.push(r_*w + c_); } } return ret; } #include int main(){ auto start = clock(); int h,w; cin >> h >> w; vector> A(h, vector(w)); for(int i=0; i> A[i][j]; } } bool filled = false; int color = -1; int q; cin >> q; for(int i=0; i> r >> c >> x; r--; c--; color = x; if(A[r][c] == x) continue; if(filled || bfs(A, r,c, x) == h*w){ filled = true; } } if(filled){ for(int i=0; i