思路好像也比较简单,就只贴一下代码
#include <iostream>
using namespace std;
const int N=110;
int father[N];
bool isRoot[N];
int findfather(int x){
int a = x;
while (x != father[x]){
x=father[x];
}
return x;
}
void unionxy(int x,int y){
int fathX = findfather(x);
int fathY = findfather(y);
if(fathX != fathY){
father[fathX] = fathY;
}
}
void init(int n){
for (int i = 1; i <= n; ++i) {
father[i] = i;
isRoot[i] = false;
}
}
int main() {
int n,m;
cin>>n>>m;
init(n);
int a,b;
for (int i = 0; i < m; ++i) {
cin>>a>>b;
unionxy(a,b);
}
for (int i = 1; i <= m; ++i) {
isRoot[findfather(i)] = true;
}
int ans=0;
for (int i = 1; i <= m ; ++i) {
ans += isRoot[i];
}
cout<<ans;
}