题解:SP131 SQDANCE - Square dance

题目传送门

什么逆天翻译。翻译成了并查集板子。

如果所有点已经成了一个连通块,再加一条边一定会成为环。

这里稍微介绍一下并查集。

在初始时,我们把每一个点的祖先都设为自己;在合并时,我们只需要将一个祖先的祖先由自己改为另一个祖先;在查询时,只需查询两个点的祖先是否相同。

#include<bits/stdc++.h>
using namespace std;
int fa[100001],T,n,m,x,y;
int findd(int xx){
	if(fa[xx]==xx)return xx;
	return fa[xx]=findd(fa[xx]);
}//查询祖先
void vnion(int xx,int yy){
	fa[findd(xx)]=fa[findd(yy)];
}//合并,因为 union 是关键字,这里写成 vnion
int main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		for(int i=1;i<=n;i++)fa[i]=i;
		int cnt=0;
		for(int i=1;i<=m;i++){
			cin>>x>>y;
			if(findd(x)!=findd(y)){
				vnion(x,y);
			}//不在一起:合并
			else cnt++;
		}
		cout<<cnt;
		cout<<endl;
	}
	return 0;
}
posted @   Weslie_qwq  阅读(1)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示