【问题标题】:How to solve this Union-Find disjoint set problem?如何解决这个联合查找不相交集问题?
【发布时间】:2021-08-10 17:16:42
【问题描述】:

我被这个问题困住了: https://onlinejudge.org/index.php?option=onlinejudge&Itemid=8&page=show_problem&problem=1099

目前,我有集合,集合中的每个元素都是朋友。但是,我不知道如何对付敌人。 谁能指出我正确的方向?

【问题讨论】:

  • 看来“敌人”等同于“不是朋友”。此外,只有两组朋友,尽管可以有许多组已知朋友。这样就够了吗?
  • 一个问题应该是独立的。尽管链接可能会有所帮助,但此处应嵌入了解问题的基本信息。其次,你应该展示你的努力,最好是用你的代码。给出你的代码出错的示例输入,或者你被卡住的地方。
  • 网站目前已关闭..

标签: algorithm disjoint-sets disjoint-union


【解决方案1】:

这个问题需要修改正常的不相交集数据结构。

如果两个人通过任意两个人的关系序列连接,您就可以确定他们是朋友还是敌人。例如,如果 X 和 Y 像 X-f-A-f-B-e-C-e-D-f-Y 一样连接,那么您就知道 X 和 Y 是朋友。

您可以使用不相交集数据结构来跟踪这种连通性 -- 为每个人创建一个集合,并在其中一个成员与另一个成员相关时合并两个不相交集。

此外,对于每个不是固定领导者的人,你应该记住他是他父母的朋友还是敌人。通过这种方式,您可以从任意两个人一直走到他们的根源,并确定他们之间的关系。

在按大小/等级和路径压缩联合期间可以轻松维护这些额外信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2011-05-28
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多