我们用编号代表每个元素。数组par表示的是父亲的编号,par[x] = x时,x是所在的树的根
int par
[MAX_N
];
int rank
[MAX_N
];
void init(int n
) {
for (int i
= 0; i
< n
; i
++)
{
par
[i
] = i
;
rank
[i
] = 0;
}
}
int find(int x
) {
if (par
[x
] == x
)
{
return x
;
}
else
{
return par
[x
] = find(par
[x
]);
}
}
void unite(int x
, int y
)
{
x
= find(x
);
y
= find(y
);
if(x
== y
) return ;
if (rank
[x
] < rank
[y
])
{
par
[x
] = y
;
}
else {
par
[y
] = x
;
if (rank
[x
] == rank
[y
]) rank
[x
]++;
}
}
并查集之平行宇宙,poj1703
转载请注明原文地址: https://win8.8miu.com/read-9527.html