练习一D

喜你入骨 提交于 2020-02-26 15:11:49

这题感觉算半个思路题主要要想到有几对纠缠在一起假设有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);
	}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!