这题感觉算半个思路题主要要想到有几对纠缠在一起假设有n对纠缠在一起那就有n-1不才能复原,然后用并查集把纠缠在一起的算一个集合,并查集,算一下就出来了
#include<bits/stdc++.h>
using namespace std;
int f[100005],sum[100005];
int find(int x){
while(x!=f[x]){
x=f[x];
}
return x;
}
int main(){
int n,x,y;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
f[i]=i;
sum[i]=1;
}
for(int i=0;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
x=find(x/2);
y=find(y/2);
if(x!=y){
f[x]=y;
sum[y]+=sum[x];
}
}
int ans=0;
for(int i=0;i<n;i++){
if(f[i]==i){
ans+=sum[i]-1;
}
}
printf("%d\n",ans);
}
}
来源:CSDN
作者:赵志锋
链接:https://blog.csdn.net/weixin_43981945/article/details/104515863