[CF 306E]Levko and Game题解翻译

题解翻译

首先我们判断Levko是否能赢

把所有可改变权值的道路权值都改成r[i],然后从以s1,s2为起点做两次Dijkstra算法。令d1[i]为s1到i的距离,d2[i]为s2到i的距离。考虑一条连接a和b,可以改变权值的道路。如果d1[a]

如果最终d1[f]

如果我们将上面的条件d1[a]

证明

我们把Levko能改变权值的道路叫做“边”。当进行Dijkstra算法时,我们不仅使用了边,也使用了所有道路。

1.

我们证明,如果存在让Levko获胜的一组边权值,那么存在一组边权值,使得Levko获胜,而且所有边权值为l[i]或r[i]。考虑对于两名玩家的最短路。

如果仅有Levko走一条从a到b的边,我们可以将其权值设为l[i]。证明:必有d1[a]

如果仅有Zenyk走从a到b的边,我们可以将其权值设为r[i]。证明:Levko的最短路不变,而Zenyk的最短路只会变大(也可能不变)。

如果没有人走这条边,我们就将其权值设为r[i]。证明:两人的最短路均不变。

如果两人都走了这条边,我们可以将其权值设为l[i]。证明:两人的最短路都减少了(原先权值-l[i])。

在所有这种操作之后,Levko仍然获胜,而且所有边的权值变成了l[i]或r[i]。

2.

考虑算法的结果。在所有操作结束后,如果一条边的权值为l[i],我们就称之为“好的”,否则若为r[i],就称之为“坏的”。

(a)

我们证明在所有操作结束后,对所有好边(a,b)有d1[a]

如果对于边(a1,b1)有d1[a1]=d2[a1],d1[a2]d1[a2]+d(a2,b2)+d(b2,a1)>=d1[a1]。

矛盾。

(译者注:不知道这里想表达什么……如果(a1,b1)是好边,那它一定在s1~f的最短路上,那么讨论几种操作,稍有常识的人都会看出修改(a2,b2)是阻挡不了结论成立的)

(b)

我们证明在所有操作结束后,对所有坏边(a,b)有d1[a]>=d2[a]。证明是:如果结论不成立,我们就能继续算法。

(c)

我们证明如果对某条边有d1[a]

(d)

我们证明如果好边的任意子集满足权值等于l[i]和d1[a]

3.

我们证明对所有边权(不一定仅仅是l[i]或r[i]),所有坏边(a,b)都有d1[a]>=d2[a]成立。

假设我们有这样一条边。考虑s1到该边起点的最短路。如果该路径上存在坏边(a1,b1),那么必然满足不等式d1[a1]

(译者注:不知道这是什么意思……或许作者的本意是把终点从a开始一步一步挪到f,同时保持结论成立?)

4.

这意味着如果Levko走任意一条坏边,他就输了。所以我们可以将所有这样的边权设为r[i]。所以我们可以将一些好边的边权设为l[i]。由(d),如果满足d1[f]

5.

在判断Levko是否能平局时,结论仍然成立。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注