codeforces round260 div1B&div2D A Lot of Games字典树上博弈

题目链接点这儿

给你一个字典树,谁走到头不能走了,那么谁就输。输者是下局的先手,问k局比赛后谁是胜者=-=

我们可以分出3种情况 

1° 先手必输,这样他下次还是先手,还是接着输,那么到最后肯定还是他输。

2°先手有必胜策略,而且可以在途中引向他必败的策略上,那么他可以在前k-1局中输掉,这样到最后一局时,他还是先手,由于他有必胜策略,显然他会在最后一局胜出=-=

3°先手有必胜策略,但是在途中他走不到必败的路上,那么这时不管谁是先手,他都必输,那么这时最后一局的胜者和局数有关=-=


叶子节点显然是必输。

某个中间节点的儿子里有必胜点,那么这个点是可输点,如果儿子里有必输点,那么这个点是必胜点。按照这两个规则dfs一遍字典树即可=-=


其实就是个比较水的博弈,但是之前从来没有遍历过字典树QAQ,所以当时直接弃疗了。

结束之后才发现字典树的dfs其实好简单QAQ,二维数组版的字典树遍历起来简直轻松!连递归都不要写!(当然这是从叶子反dfs到根=-=)

代码点这里=-=

你可能感兴趣的:(数据结构,算法,ACM,博弈,codeforces)