挺多人默不来并查集模板的,写一篇,方便装B(
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
int n,m;
int s[10086];
void init(){//把每个人的老大初始化成自己
for(int i=0;i<n;i++){
s[i]=i;
}
return ;
}
int find(int x){//查找函数,递归查询老大
if(s[x] == x)return x;//如果老大是自己,直接返回
return s[x]=find(s[x]);//这里是路径压缩
}
void merge(int x,int y){//合并函数
int fx,fy;
fx = find(x),fy = find(y);//查找两个人的老大
if(fx!=fy){
s[fx]=fy;//直接改老大
}
return ;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
int a,b;
cin>>a;
cin>>b;
merge(a,b);
}
int sum =0;
for(int i=0;i<n;i++){
if(s[i]==i){//利用老大特性,统计有几个老大
sum++;
}
}
cout<<sum<<endl;
return 0;
}