题解+主要思路
2026-05-02 21:23:21
发布于:浙江
135阅读
0回复
0点赞
题目分析
题目需要我们对元素进行合并操作与连通性查询操作,这是并查集的经典应用场景。并查集可以在近似 O(1)的时间复杂度内完成这两种操作,非常高效。
算法思路
初始化:将每个元素的父节点设为自己,表示每个元素自成一个集合。
查找函数:采用路径压缩的查找方式,找到元素的根节点,同时将路径上所有节点直接指向根,优化后续查询速度。
合并操作:当操作类型为 1 时,将两个元素所在的集合合并。
查询操作:当操作类型为 2 时,判断两个元素是否拥有相同的根节点,相同则连通,输出 Y,否则输出 N。
复杂度
时间复杂度近似
O(n+m)
代码如下 谢绝复制
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+7;
int fat[N];
int n,m;
int find(int x)//查找
{
return x==fat[x]?x:fat[x]=find(fat[x]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
fat[i]=i;
}
while(m--)
{
int x,y,z;
cin>>x>>y>>z;
if(x==1)
{
fat[find(y)]=find(z);
}
if(x==2)
{
if(find(y)==find(z))
{
cout<<"Y"<<endl;
}
else
{
cout<<"N"<<endl;
}
}
}
return 0;
}
全部评论 4
d
2026-02-04 来自 浙江
0d
2026-02-04 来自 浙江
0d
2026-02-04 来自 浙江
0d
2026-01-24 来自 浙江
0





有帮助,赞一个