#pragma region include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #pragma endregion //#include ///////// #pragma region typedef typedef long long LL; typedef long double LD; typedef unsigned long long ULL; typedef std::pair PLL;// typedef std::pair PII;// #pragma endregion //typedef ////定数 const int INF = (int)1e9; const LL MOD = (LL)1e9+7; const LL LINF = (LL)4e18+20; const LD PI = acos(-1.0); const double EPS = 1e-9; ///////// using namespace::std; int H,W; vector< vector > field; class unionfind_set{ int cNum;//要素数 vector< set > other; vector parent; vector color; public: unionfind_set(int n){ cNum = n; parent = vector(n); other = vector< set >(n); color = vector(n); for(int i=0;i::iterator itr,end; itr = other[y].begin(); end = other[y].end(); for(;itr!=end;++itr){ other[x].insert( find(*itr) ); } other[x].erase(x); other[x].erase(y); } void grow(int x,int color){ x = find( x ); set temp = other[x]; set_color(x,color); set::iterator itr,end; itr = temp.begin(); end = temp.end(); for(;itr!=end;++itr){ add(*itr,x); } } }; void solve(){ cin >> H >> W; field = vector< vector >(H,vector(W)); unionfind_set ufs(H*W); for(int h=0;h> field[h][w]; } } for(int r=0;r> Q; int R,C,X; while(Q--){ cin >> R >> C >> X; --R;--C; if( ufs.get_color( R*W+C ) != X ){ ufs.grow(R*W+C, X); } /*{ for(int r=0;r