const int maxn = 1e5 + 7;
int pre[maxn];//根数组
int Find(int x)//找到x的根
{
int p, tmp; p = x;
while (x != pre[x])
x = pre[x];
while (p != x)
{
tmp = pre[x];
pre[x] = x;
p = tmp;
}
return x;
}
void join(int x, int y)//将x的根跟y的根结合起来
{
int fx = Find(x);
int fy = Find(y);
if (fx != fy)
pre[fx] = fy;
}
bool Same(int x, int y)//判断x的根是否与y的根相同
{
return Find(x) == Find(y);
}
int main()
{
int n, m;//n代表有n个物品,m代表有m种关系
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) pre[i] = i;//初始化
for (int i = 1; i <= m; i++)//输入关系
{
int a, b;
scanf("%d%d", &a, &b);
join(a, b);
}
return 0;
}
并查集模板 (自用)
最新推荐文章于 2021-05-19 10:28:29 发布