题目 : AcWing 837. 连通块中点的数量
依旧是每日碰壁小细节
算法知识:并查集,快速合并集合
先看代码
if(op[0] == 'C')
{
scanf("%d%d",&a,&b);
if(find(a) == find(b)) continue;
s[find(b)] += s[find(a)];
p[find(a)] = find(b);
}
重点在倒数两行,关于代码的顺序问题,一定要看好,前一步的代码会不会影响下一行的代码,而这种变化与不变化是不是符合自己的需求。
比如这两行到换位置
p[find(a)] = find(b);
s[find(b)] += s[find(a)];
此时,find(a)已经发生了变化,而这并不是想要的结果,导致s[find(a)]与原目标有出入
所以要多加注意呐!!