#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100005;
int n,k,x,y,ans,f[N];
int find (int x) {
return f[x]==x?x:find(f[x]);
}
int main () {
scanf ("%d%d",&n,&k);
for(int i=1;i<=n;i++) f[i]=i;
while(k--){
scanf ("%d%d",&x,&y);
int r1=find(x),r2=find(y);
if (r1!=r2)
f[r1]=r2;
else ans++;
}
printf("%d\n",ans);
return 0;
}
这个代码实现的貌似是按照输入顺序安排,但为什么这样最优?