题意:
一个矩阵中 -1代表宝藏,0代表通路,其他正整数代表石头。两个人轮流采取操作:从矩阵外面任何地方进如矩阵,对可以到达的石头进行一次攻击,石头将掉一血,若石头掉为0血,则此处变为通路。问必胜方
解决:
设有某一圈石头围在-1周围,且这一圈中每一个石头都只有1的血量,圈外无其他石头。则这一圈石头出现的时候,当前局面为必败态。此时先手的人只能选择这全是石头中的一个进行攻击,后手则可直接取得宝藏。找出这圈石头的过程中有几个trick,也有些技巧。先从-1开始dfs一次,将可到达的石头标记一次,再从矩阵外面向内dfs一次,如果碰到之前被标记过的石头,再标记一次。最终被标记了两次的石头就是上述的“圈”上的石头。并在dfs过程中,记录圈外石头总血量,以及每个圈上石头(血量-1)。结果就是必败态出现之前的可操作次数。若为偶数,先手必败,否则,先手必胜。
对了,注意如果-1直接和矩阵外联通,则先手即胜。
其中小trick的样例
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0-1 0 1 0 0 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
这组数据中,橙色表注部分的为圈上石头,蓝色部分则为圈内部分,黄色为圈外部分。