什么是并查集?
当我们在做图论题目的时候
经常会读到一些长这样的题目描述:
—连接 a , b a,b a,b 的一条长 c c c 的小路
— a , b a,b a,b 是亲戚, b , d b,d b,d 是亲戚
……
诸如此类
当我们看到这种题目描述
就会很懵逼
怎么把他们连起来???
当你试图用一个二维数组表示关系的时候
类似这样(节选)
for(unsigned int i=0;i<m;i++)
{
cin>>pei>>pei1;
if(shu1[pei]==false&&shu1[pei1]==false)
{
num1[pei]+=num[pei-1]+num[pei1-1];
jia1[pei]+=jia[pei-1]+jia[pei1-1];
num2[pei][pei]=1;
num2[pei1][pei]=1;
shu1[pei]=true;
shu1[pei1]=true;
}
else if(shu1[pei]==true&&shu1[pei1]==false)
{
for(int s=1;s<=n;s++)
{
if(num2[pei][s]==1)
{
num2[pei1][s]=1;
num1[s]+=num[pei1-1];
jia1[s]+=jia[pei1-1];
shu1[pei1]=true;
break;
}
}
}
else if(shu1[pei]==false&&shu1[pei1]==true)
{
for(int s=1;s<=n;s++)
{
if(num2[pei1][s]==1)
{
num2[pei][s]=1;
num1[s]+=num[pei-1];
jia1[s]+=jia[pei-1];
shu1[pei]=true;
break;
}
}
}
else if(