并查集
ll fa[50010];
void init()
{
for (int i = 1; i <= 50000; i++)
fa[i] = i;
}
ll find(ll a)
{
if (fa[a] == a)
return a;
return fa[a] = find(fa[a]);
}
void mix(ll a, ll b)
{
ll fa1 = find(a), fb = find(b);
fa[fb] = fa1;
}
int main()
{
init();
ll n, m, p;
cin >> n >> m >> p;
for (int i = 1; i <= m; i++)
{
ll temp1, temp2;
cin >> temp1 >> temp2;
mix(temp1, temp2);
}
while (p--)
{
ll a, b;
cin >> a >> b;
if (find(a) == find(b))
cout << "Yes\n";
else
cout << "No\n";
}
return 0;
}
本文深入探讨了并查集算法的实现,通过具体代码展示了如何初始化并查集、查找元素所属集合以及合并两个集合的过程。适用于解决寻找连通组件、判断元素是否属于同一集合等问题。

被折叠的 条评论
为什么被折叠?



