Language: C++

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
#define MAX_N 100005
int N,M;
int i;
int par[MAX_N];
int rank[MAX_N];

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() {
  cin >> N >> M;
  int p[N];
  for(i=0;i<N;i++) cin>>p[i];
  init(N);
  for(i=0;i<M;i++) {
    int A,B;
    cin >>A >> B;
    unite(A,B);
  }
  ll ans=0;
  for(i=0;i<N;i++){
	if(same(i,p[i])) ans+=1;
  }
  cout<<ans<<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/stl_pair.h:60,
                 from /usr/include/c++/14/bits/stl_algobase.h:64,
                 from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 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:8:5: note:                 'int rank [100005]'
    8 | int rank[MAX_N];
      |     ^~~~
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:8:5: note:                 'int rank [100005]'
    8 | int rank[MAX_N];
      |     ^~~~
a.cc:29:14: 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:8:5: note:                 'int rank [100005]'
    8 | int rank[MAX_N];
      |     ^~~~
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:8:5: note:                 'int rank [100005]'
    8 | int rank[MAX_N];
      |     ^~~~
a.cc:33:17: 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:8:5: note:                 'int rank [100005]'
    8 | int rank[MAX_N];
      |     ^~~~
a.cc:33:26: 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:8:5: note:                 'int rank [100005]'
    8 | int rank[MAX_N];
      |     ^~~~