并查集
并查集
例题:P1551 亲戚 https://www.luogu.org/problem/P1551

这是一道典型的并查集例题,将亲戚关系转化成树状结构
先处理输入部分,n为节点数,m为关系数,p为询问个数、
fine 函数
int fine(int x)
{
return f[x]==x?x:f[x]=fine[f[x]];
}
全部代码
include
using namespace std;
int f[5010],n,m,p,a,b;
int fine(int x)
{
return f[x]==x?x:f[x]=fine(f[x]);
}
int main()
{
cin>>n>>m>>p;
for(int i=1;i<=n;i++) f[i]=i;
for(int i=1;i<=m;i++)
{
cin>>a>>b;
f[fine(a)]=fine(b);
}
for(int i=1;i<=p;i++)
{
cin>>a>>b;
if(fine(a)==fine(b))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
主要思路:将关系变成祖先与祖先的关系,最后对比2个节点祖先是否相同即可

浙公网安备 33010602011771号