Language: C++

#include <iostream>
#include <set>
using namespace std;

int par[100005];
int rank[100005];

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() {
  ios::sync_with_stdio(false);
  int N, M;
  cin >> N >> M;
  init(N+1);
  for (int i=0; i<M; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    unite(x, y);
  }
  set<int> s;
  for (int i=1; i<=N; i++) {
    s.insert(find(i));
  }
  cout << s.size() << endl;
}

Compiler output:
a.cc: In function 'void init(int)':
a.cc:11:5: error: reference to 'rank' is ambiguous
   11 |     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:6:5: note:                 'int rank [100005]'
    6 | int rank[100005];
      |     ^~~~
a.cc: In function 'void unite(int, int)':
a.cc:27:7: error: reference to 'rank' is ambiguous
   27 |   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:6:5: note:                 'int rank [100005]'
    6 | int rank[100005];
      |     ^~~~
a.cc:27:17: error: reference to 'rank' is ambiguous
   27 |   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:6:5: note:                 'int rank [100005]'
    6 | int rank[100005];
      |     ^~~~
a.cc:31:9: error: reference to 'rank' is ambiguous
   31 |     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:6:5: note:                 'int rank [100005]'
    6 | int rank[100005];
      |     ^~~~
a.cc:31:20: error: reference to 'rank' is ambiguous
   31 |     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:6:5: note:                 'int rank [100005]'
    6 | int rank[100005];
      |     ^~~~
a.cc:31:29: error: reference to 'rank' is ambiguous
   31 |     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:6:5: note:                 'int rank [100005]'
    6 | int rank[100005];
      |     ^~~~