关系和大多数合并操作计算?

时间:2015-02-26 18:25:32

标签: c++ algorithm data-structures merge set

假设C={1,2,...,100}。假设我们设置了A_1 to A_n (n<=100),首先我们有A_i={i}.关系R,给出了C上的150个元素。每次我们随机选择(a,b) ∈ R中的一个元素。假设a ∈ A_ib ∈ A_j。如果i not equal to j,我们会合并A_j in A_i。 (即:A_i <-- A_i union A_j)。最多,我们有多少合并操作?

1)149

2)150

3)99

4)100

我的教授说(4)是真的,但我很清楚我们是如何达到这个的!任何学习的想法?或者我可以用它做任何实验的代码吗?

编辑: A_j中的A_j合并,意味着删除A_j并保留A_i。只是我觉得有两个案例发生了。

1 个答案:

答案 0 :(得分:1)

我认为问题在于您定义&#34;合并的方式。&#34;

如果&#34;合并&#34;实际上意味着[A_i&lt; - A_i union A_j]和[A_j&lt; - {}],那么正确答案似乎是99.

这是因为每次执行合并时,您都会清空其中一个A_k集,并且它不再参与任何将来的合并。由于您有100个非空集开头,因此在只有一个包含元素的集合之前,您最多只能执行99次合并,并且不能再进行合并。