并查集的另外形式(路径压缩):
const int maxn=1999;
typedef struct
{
int parent;
int cnt;
}node;
node data[maxn];
void init()
{
for(int i=0;i<=maxn;i++)
{
data[i].parent=i;
data[i].cnt=1;
}
}
int find(int x)
{
intr=x;
while(data[r].parent!=r)
r=data[r].parent;
inti=x,j;
while(data[i].parent!=r)
{
j=data[i].parent;
data[i].parent=r;
i=j;
}
returnr r;
}
void join(int x,int y)
{
if(data[x].cnt==data[y].cnt)
{
data[y].parent=data[x].parent;
data[x].cnt++;
}
elseif(data[x].cnt>data[y].cnt)
{
data[y].parent=x;
}
else
{
data[x].parent=y;
}
}