#bYybttg060703. 1665:【例 3】移棋子游戏

1665:【例 3】移棋子游戏

好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:


题目描述

给定一个有 NN 个节点的有向无环图(DAG),图中某些节点上有棋子,两名玩家交替移动棋子。

玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点,无法移动者输掉游戏。

对于给定的图和棋子初始位置,双方都会采取最优的行动,询问先手必胜还是先手必败。


输入格式

第一行,三个整数 N,M,KN, M, K

  • NN 表示图中节点总数;
  • MM 表示图中边的条数;
  • KK 表示棋子的个数。

接下来 MM 行,每行两个整数 X,YX, Y 表示有一条边从 XX 出发指向 YY

接下来一行,KK 个空格间隔的整数,表示初始时,棋子所在的节点编号。


输出格式

若先手胜,输出 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


数据范围

对于全部数据:

  • N2000N \le 2000
  • M6000M \le 6000
  • 1KN1 \le K \le N

时空限制

  • 时间:1000 ms1000 \text{ ms}
  • 内存:524288 KB524288 \text{ KB}

提示
此题是经典的 有向图游戏组合 问题,利用 SG 定理

  • 计算图中每个节点的 SG 值(Mex 函数);
  • 初始 KK 个棋子所在的节点,其 SG 值异或和为整个游戏的 Nim-sum;
  • 若 Nim-sum ≠ 0,先手必胜;否则后手必胜。

由于图是 DAG,可按照拓扑逆序(或递归记忆化搜索)计算 SG 值,复杂度 O(N+M)O(N+M)