「考试」糊涂图

不知道为啥达哥说简单。。。。。。

考场上打了俩小时啥也没写出来导致崩盘了。

但是真的是好题啊。

要求在$NIM\ DAG$上随意加一条边,这条边只能走一次,求$Nim$博弈的胜率最大值和平均值。

考虑求出两个数组$dp[i]$和$g[i][0/1]$

$dp[i]$表示到达的地方是$i$的情况下不论是谁的胜率。

$g[i][0/1]$表示到达的点是$i$的情况下,当前要走的人是达哥/B哥的概率。

两个数组都很好求,第一个反向拓扑即可,叶子节点都为0。

$$dp[t]+=\frac{(1-dp[x])}{d[t]}$$

第二个正向拓扑即可,初始化$g[st][0]=1$。

$$g[t][l]+=\frac{g[x][l^1]}{d[x]}$$

然后可爱的达哥又保证了所有的边$(a,b)$都保证$a<b$那么拓扑序就是$1-n$,直接循环即可。

考虑统计答案。

假设当前链接的两个点是$i,j$的话,如果我们不经过$i$点的话。

胜率是:

$$dp[st]g[st][0]-dp[i]g[i][0]-(1-dp[i])g[i][1]$$。

如果经过呢?

就有点麻烦了。

分开考虑贡献即可。

设$F[i][j]$为走$i$点,不论是谁的胜率。

那么:

$$F[i][j]=dp[i]\frac{d[i]}{d[i]+1}+(1-dp[j])\frac{1}{d[i]+1}$$

那么胜率是:

$$g[i][0]F[i][j]+g[i][1](1-F[i][j])$$

那么:

$$ans[i][j]=dp[st]g[st][0]-dp[i]g[i][0]-(1-dp[i])g[i][1]+g[i][0]F[i][j]+g[i][1](1-F[i][j])$$

首先考虑求最大值。

我们发现对于某一个$i$来说,除了$j$的部分其余贡献都是确定了的,确定最值只在于$F[i][j]$,枚举$j$复杂度又太高,但是发现$F[i][j]$的最值只和$dp[j]$有关,那么我们用一个$set$维护最值即可,可以$logn$查询出对于每个$i$的最优决策。

再考虑求和。

化一下式子就可以求出每个$i$的贡献。

$$\begin{array}{rcl}\\Su&=&\sum\limits_{i=1}^{n}ans[i]\\&=&\sum\limits_{i=1}^{n}\left(\ (n-1)(dp[st]g[st][0]-dp[i]g[i][0]-(1-dp[i])g[i][1])+g[i][0]f[i]+g[i][1](1-f[i])\ \right)\end{array}$$

$$f[i]=\sum\limits_{j=1}^{n}[i!=j]F[i][j]$$

对于每个$j$求个和即可。

这样平均值也解决了。

posted @ 2019-10-19 08:31  Lrefrain  阅读(220)  评论(0编辑  收藏  举报