100 #P1171. G60*【博弈SG】练习1:在图中求SG
G60*【博弈SG】练习1:在图中求SG
【题意】USACO 2006 January Gold
有一个 个点的有向拓扑图,上面有 个棋子,棋子放在一个点上, 一个点上可以放多个棋子。
每次可以选一个棋子沿着一条有向边走一步(走到相邻的点上)。最后无法走棋的人输。
先手赢输出“WIN”否则输出”LOSE“
【输入格式】
多组数据。每组描述如下:
输出第一行 下来 行,每行第一个会给一个数,表示第 个点的出度,下来描述每个点的后继节点。点的编号为 to 。
下来多组询问,每个询问给出 个棋子的位置。 为 时表示该组测试数据结束。(注意不是 为 )
数据太大,注意C++要用scanf
【输出格式】
每个询问输出 "WIN" or "LOSE".
【样例输入】
4
2 1 2
0
1 3
0
1 0
2 0 2
0
4
1 1
1 2
0
0
2 0 1
2 1 1
3 0 1 3
0
【样例输出】
WIN
WIN
WIN
LOSE
WIN
【提示】
拓扑好序列,按照拓扑序列从后往前,没有后继的点的sg值先赋值为0(必败),有后继节点的点就用mex函数。 最后的总状态为所有点的sg值的和(异或和),如下图。