您当前的位置: 首页 > 

minato_yukina

暂无认证

  • 4浏览

    0关注

    138博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

并查集模板

minato_yukina 发布时间:2021-01-02 13:30:48 ,浏览量:4

来自洛谷的板子

首先是find函数

int find(int k){
	if(f[k]==k) return k;
	return f[k]=find(f[k]);
}

找到每个集合的老大.

合并的操作

f[find(p2)]=find(p3);

然后判断不能只用数组判断,由于路径压缩的问题数组不能完全代表它的老大.

完整代码:

#include
#include
using namespace std;
int f[10010];
int find(int k){
	if(f[k]==k) return k;
	return f[k]=find(f[k]);
}

int main(){ int i,j,k,n,m,p1,p2,p3;
	cin>>n>>m;
	for(i=1;i            
关注
打赏
1663570241
查看更多评论
0.0486s