#include using namespace std; int d[100][100]; //BEGIN CUT HERE struct UnionFind{ int num;//連結成分の数 vector r,p;//そのグループのサイズ,自分の親っぽいやつ UnionFind(){} UnionFind(int n):num(n),r(n,1),p(n,0){iota(p.begin(),p.end(),0);} int find(int x){//どのグループに所属するか return (x==p[x]?x:p[x]=find(p[x]));//xがグループの名前と一致するまでxを親にする } bool same(int x,int y){//同じグループかどうか return find(x)==find(y); } void unite(int x,int y){//xとyを同じグループにする x=find(x);y=find(y);//xとyのグループの名前をどっちかが変える if(x==y) return; if(r[x] void fin(T a){ cout<>w>>h; for(int i=0;i>d[i][j]; UnionFind uf(10000); for(int i=1;i