zoukankan      html  css  js  c++  java
  • [CF 306E]Levko and Game题解翻译

    题解翻译

    首先我们判断Levko是否能赢

    把所有可改变权值的道路权值都改成r[i],然后从以s1,s2为起点做两次Dijkstra算法。令d1[i]为s1到i的距离,d2[i]为s2到i的距离。考虑一条连接a和b,可以改变权值的道路。如果d1[a]<d2[a],我们就将该道路的权值设为l[i],然后重新做两次Dijkstra。我们不断进行这一过程,直到不再有道路改变权值。 

    如果最终d1[f]<d2[f]那么Levko就赢了。

    如果我们将上面的条件d1[a]<d2[a]改成d1[a]<=d2[a],我们就可以判断Levko是否能以平局结束。

    证明

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

    1.

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

    如果仅有Levko走一条从a到b的边,我们可以将其权值设为l[i]。证明:必有d1[a]<d2[a],因为Levko走到了这里然后获胜。这一条件在改变权值后仍然满足。如果Zenyk走了这条边,他就输了,因为d1[f]<=d1[a]+d(a,b)+d(b,f)<d2[a]+d(a,b)+d(b,f)=d2[f]。如果Zenyk不走这条边,他也输了,因为Levko的最短路变得更短(d(x,y)代表从x到y的最短路)。

    如果仅有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]<d2[a]。

    如果对于边(a1,b1)有d1[a1]<d2[a1],而在修改边(a2,b2)的权值后这一不等式不再成立。我们有d1[a1]>=d2[a1],d1[a2]<d2[a2]。我们只改一条边的权值,而s2到f的最短路变得更短,这就意味着边(a2,b2)在该最短路上。d2[a1]=d2[a2]+d(a2,b2)+d(b2,a1)>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]<d2[a]成立,但我们在一次迭代中未处理这条边(处理了另外一条边),那么该条件在此次迭代后依然成立。证明同(a).

    (d)

    我们证明如果好边的任意子集满足权值等于l[i]和d1[a]<d2[a],那么我们在把所有好边的权值都变成l[i]后,这一结论仍然成立。证明是:模拟算法的所有操作,同时使用(c)。

    3.

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

    假设我们有这样一条边。考虑s1到该边起点的最短路。如果该路径上存在坏边(a1,b1),那么必然满足不等式d1[a1]<d2[a1]。考虑这些坏边中的第一条(a,b)。那么从s1到a的最短路不包含任何坏边。考虑另一个问题,其中m和我们的问题相等,但终点在a。那么好边和坏边也将相同。我们像在1中一样修改所有边的权值。注意到所有坏边的权值都为r[i]。所以仅有好边才能满足l[i]和d1[a1]<d2[a1]。由(d),我们可以将所有好边的权值设为l[i],而且满足d1[a1]<d2[a1]。这和这条边是坏边矛盾。

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

    4.

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

    5.

    在判断Levko是否能平局时,结论仍然成立。
  • 相关阅读:
    第九周学习进度总结
    SLR(1)语法分析(JAVA实现)
    算符优先分析
    第八周学习进度总结
    Android 自学之相对布局 RelativeLayout
    Android 自学之表格布局 TableLayout
    Android 自学之线性布局 LinearLayout
    Android 自学之帧布局 FrameLayout
    机器学习进度05(FaceBook案例)
    机器学习进度04(转换器、预估器、K-近邻算法、模式选择与调优)
  • 原文地址:https://www.cnblogs.com/wmdcstdio/p/7554242.html
Copyright © 2011-2022 走看看