我在这里要问的问题是在堆栈溢出之前已经被问过了。 但我无法正确理解 Skiminok 发布的解决方案。
以下是Link .
我尝试使用给定的两个示例测试用例在上面的链接上发布的解决方案,但我无法得到正确的答案。
对于测试用例1 ::
N = 3且K = 2
5 4 7
DAG将是::
注意:我构建了上面的DAG考虑:
让pi和pj成为两个不同的问题。然后我们将绘制从pi到pj的有向边,当且仅当pj可以在pi之后直接在同一天连续解决。即,必须满足以下条件:
我< j,因为你应该早点解决那个不太困难的问题。
| vi - vj | > = K(评级要求)。
然后我考虑::
构建了二分图对于原始DAG的每个有向边(u,v),应该将无向边(au,bv)添加到二分图,其中{ai}和{bi}是大小为n的两部分。
答案=上述二分图中的最大基数匹配。
以上二分图中的最大基数匹配= 1(绿色egde)
但答案是2。
类似的样本测试案例2:
5 1
5 3 4 5 6
上图中的MAx基数超过1,但正确的答案是1。
我想我没有正确实现它,请问你能说出我在哪里犯错误或者是否还有其他方法
谢谢!
答案 0 :(得分:0)
我自己找到了答案, 第二天我发布了这个问题。
我的解决方案通过了所有测试用例。
我在最后一步犯了错误。 实际上,Answer / solution是SET B中不包含Maximal Bipartite Matching边缘的顶点总数。
例如样本测试用例1 ::
最大匹配M = {(1A,3B)}。
最大匹配的边缘没有入射到两个顶点(顶点1和顶点2)。所以答案等于这样的顶点数= 2
对于测试用例2 ::
最大匹配M = {(1A,2B),(2A,3B),(3A,4B),(4A,5B)}。
最大匹配的边缘没有入射到一个顶点(顶点1)。所以答案等于1