#bYybttg060703. 1665:【例 3】移棋子游戏
1665:【例 3】移棋子游戏
好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:
题目描述
给定一个有 个节点的有向无环图(DAG),图中某些节点上有棋子,两名玩家交替移动棋子。
玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点,无法移动者输掉游戏。
对于给定的图和棋子初始位置,双方都会采取最优的行动,询问先手必胜还是先手必败。
输入格式
第一行,三个整数 :
- 表示图中节点总数;
- 表示图中边的条数;
- 表示棋子的个数。
接下来 行,每行两个整数 表示有一条边从 出发指向 。
接下来一行, 个空格间隔的整数,表示初始时,棋子所在的节点编号。
输出格式
若先手胜,输出 win,否则输出 lose。
样例
样例输入
6 8 4
2 1
2 4
1 4
1 5
4 5
1 3
3 5
3 6
1 2 4 6
样例输出
win
样例解释
这是一个 有向图游戏(Impartial Combinatorial Games) 的多个棋子版本。
对于每个棋子所在的节点,可以计算其 SG 函数值(Sprague–Grundy)。
由于图是 DAG,SG 值可通过拓扑逆序递推求出。
- 若所有棋子所在节点的 SG 值的异或和 ≠ 0,则先手必胜;
- 若所有棋子所在节点的 SG 值的异或和 = 0,则先手必败。
样例中,计算各节点 SG 值(递推):
- 节点 5、6 无出边,SG=0;
- 节点 4 → {5},Mex{0} = 1;
- 节点 3 → {5,6},Mex{0,0} = 1;
- 节点 1 → {4,5,3},Mex{1,0,1} = 2;
- 节点 2 → {1,4},Mex{2,1} = 0。
初始棋子位置:1, 2, 4, 6
对应 SG 值:2, 0, 1, 0
异或和:2 ⊕ 0 ⊕ 1 ⊕ 0 = 3 ≠ 0,所以先手必胜,输出 win。
数据范围
对于全部数据:
时空限制
- 时间:
- 内存:
提示
此题是经典的 有向图游戏组合 问题,利用 SG 定理:
- 计算图中每个节点的 SG 值(Mex 函数);
- 初始 个棋子所在的节点,其 SG 值异或和为整个游戏的 Nim-sum;
- 若 Nim-sum ≠ 0,先手必胜;否则后手必胜。
由于图是 DAG,可按照拓扑逆序(或递归记忆化搜索)计算 SG 值,复杂度 。