Language: C++

#include <iostream>
using namespace std;

const int NMAX = 1e+5;
const int MMAX = 1e+5;

int par[NMAX+MMAX], rank[NMAX+MMAX];

void init(int n)
{
  for(int i = 0; i < n; i++){
    par[i] = i;
    rank[i] = 0;
  }
}

int find(int x)
{
  if(par[x] == x) return x;
  else return par[x] = find(par[x]);
}

void unite(int x, int y)
{
  x = find(x);
  y = find(y);
  if(x == y) return;

  if(rank[x] < rank[y]){
    par[x] = y;
  }else{
    par[y] = x;
    if(rank[x] == rank[y]) rank[x]++;
  }
}

bool same(int x, int y)
{
  return find(x) == find(y);
}

int main()
{
  int n, m;
  cin >> n >> m;

  init(n+m);

  for(int i = 0; i < n; i++){
    int k;
    cin >> k;

    for(int j = 0; j < k; j++){
      int l;
      cin >> l;

      unite(i, n+l-1);
    }
  }
  
  for(int i = 1; i < n; i++){
    if(!same(i, i-1)){
      cout << "NO" << endl;
      return 0;
    }
  }

  cout << "YES" << endl;

  return 0;
}


Compiler output:
a.cc: In function 'void init(int)':
a.cc:13:5: error: reference to 'rank' is ambiguous
   13 |     rank[i] = 0;
      |     ^~~~
In file included from /usr/include/c++/14/bits/move.h:37,
                 from /usr/include/c++/14/bits/exception_ptr.h:41,
                 from /usr/include/c++/14/exception:166,
                 from /usr/include/c++/14/ios:41,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/type_traits:1437:12: note: candidates are: 'template<class> struct std::rank'
 1437 |     struct rank
      |            ^~~~
a.cc:7:21: note:                 'int rank [200000]'
    7 | int par[NMAX+MMAX], rank[NMAX+MMAX];
      |                     ^~~~
a.cc: In function 'void unite(int, int)':
a.cc:29:6: error: reference to 'rank' is ambiguous
   29 |   if(rank[x] < rank[y]){
      |      ^~~~
/usr/include/c++/14/type_traits:1437:12: note: candidates are: 'template<class> struct std::rank'
 1437 |     struct rank
      |            ^~~~
a.cc:7:21: note:                 'int rank [200000]'
    7 | int par[NMAX+MMAX], rank[NMAX+MMAX];
      |                     ^~~~
a.cc:29:16: error: reference to 'rank' is ambiguous
   29 |   if(rank[x] < rank[y]){
      |                ^~~~
/usr/include/c++/14/type_traits:1437:12: note: candidates are: 'template<class> struct std::rank'
 1437 |     struct rank
      |            ^~~~
a.cc:7:21: note:                 'int rank [200000]'
    7 | int par[NMAX+MMAX], rank[NMAX+MMAX];
      |                     ^~~~
a.cc:33:8: error: reference to 'rank' is ambiguous
   33 |     if(rank[x] == rank[y]) rank[x]++;
      |        ^~~~
/usr/include/c++/14/type_traits:1437:12: note: candidates are: 'template<class> struct std::rank'
 1437 |     struct rank
      |            ^~~~
a.cc:7:21: note:                 'int rank [200000]'
    7 | int par[NMAX+MMAX], rank[NMAX+MMAX];
      |                     ^~~~
a.cc:33:19: error: reference to 'rank' is ambiguous
   33 |     if(rank[x] == rank[y]) rank[x]++;
      |                   ^~~~
/usr/include/c++/14/type_traits:1437:12: note: candidates are: 'template<class> struct std::rank'
 1437 |     struct rank
      |            ^~~~
a.cc:7:21: note:                 'int rank [200000]'
    7 | int par[NMAX+MMAX], rank[NMAX+MMAX];
      |                     ^~~~
a.cc:33:28: error: reference to 'rank' is ambiguous
   33 |     if(rank[x] == rank[y]) rank[x]++;
      |                            ^~~~
/usr/include/c++/14/type_traits:1437:12: note: candidates are: 'template<class> struct std::rank'
 1437 |     struct rank
      |            ^~~~
a.cc:7:21: note:                 'int rank [200000]'
    7 | int par[NMAX+MMAX], rank[NMAX+MMAX];
      |                     ^~~~