赞迪卡之声妮莎与奥札奇(无向图删边,博弈论)
题目大意
给一个无向完全图,甲乙两人在玩删边游戏。规则是,从一号点出发,甲先手,挑选一条边前进,并且把这条边删除,乙再选一条边前进,再把这条边删除。两者轮流进行直到一个人无法选边前进,判定该人失败。问甲乙两人都按照最佳方式操作,谁必胜。
解题思路
这个题利用了完全图的一种对称性质,下面将以四个点的情况对这种对称性做出具体解释。四个点的完全图在逻辑上更类似于一个四面体而不是一个正方形,因为在正方形中对角线和四条边并不是等价的,但在四面体中这六条边位置都是等价的。
可以发现加入从A点出发,先手甲从A走到B后,乙再从B走到C和从B走到D都是等价的(C和D有明显的对称关系),也就是说乙不管走那一条边都不能改变游戏的胜负了。继续下去,假设乙此时从B走到C,此时甲有两种走法。如果甲从C走到A,那么乙只能从A走到D,最后甲从D走到B,乙无路可走。从中可以看出乙从一开始就无法决定最后的胜负,而甲的走法引导着局面的胜负。在点数更多的完全图中,甲只要尝试着向A点或者B点挤过去,总可以把乙给“挤死”。如果你感觉文字叙述比较模糊的话,那么下面的图将会使结论更加清晰。
这是四个点的情况的平面图,绿色表示乙,红色表示甲。最终甲胜利(A->B, B->C, C->A, A->D, D->B)
这是五个点的情况。由于在甲连完AB之后,乙连BD、BE、BC其实都是等价的,这时我们先连BD,在乙连完DA之后,甲连AC、AE也是等价的,我们先连AC,这时你会发现五个点的情况其实就是在四个点的基础上,再加了B->D,E->A这一轮,最后乙还是失败。
这是六个点的情况,经过上次的分析,就是在五个点的基础上加上A->F,F->B一轮,最后乙还是失败。
最后容易发现更多的点的情况直接在下面加就行了。于是得出结论当点数大于等于4的时候乙必输,当点数等于1,2,3的时候,结果笔算就行了。
代码实现
更多细节请参考代码。
#include <bits/stdc++.h>
using namespace std;
int main() {
int T; cin >> T;
while (T--) {
int n; cin >> n;
n != 1 ? puts("Ulamog, the Infinite Gyre") : puts("Kozilek, Butcher of Truth");
}
return 0;
}