kruscal用数组代替并查集可以吗?

新手上路,请多包涵

用一个bool join[max_n]数组保存点是否已经有边连接,在遍历边时,如果边两端的点x和y的join[x]和join[y]都等于1,则说明这两个点都有边连接他们了,则不考虑这条边。这样可以吗?

阅读 3k
2 个回答
新手上路,请多包涵

两个节点 join 为 1 并不能说明两个点在同一个联通块的。也就是说可能两个点在不同联通块内而都有别边连接,那么这条边会合并两个联通块。所以还是并查集吧。
当然有一种叫做 link-cut-tree 的数据结构也可以轻松维护最小生成树,本质也是维护联通块的连通性。

kruscal算法在求最小生成树时,充分利用了贪心的特点。比如:
Image
AB和CD会最先被选出来,此时它们被访问过了,但不属于同一棵树。如果ABCD不联通,此时算法已经结束,求出了这个森林的所有最小生成树,但使用数组并不知道这些点是属于一棵树还是分别属于多棵树。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题