题目:https://www.acwing.com/problem/content/1321/

给定一个有 N 个节点的有向无环图,图中某些节点上有棋子,两名玩家交替移动棋子。
玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点,无法移动者输掉游戏。
对于给定的图和棋子初始位置,双方都会采取最优的行动,询问先手必胜还是先手必败。
输入格式:
第一行,三个整数 N,M,K,N 表示图中节点总数,M 表示图中边的条数,K 表示棋子的个数。
接下来 M 行,每行两个整数 X,Y 表示有一条边从点 X 出发指向点 Y。
接下来一行, K 个空格间隔的整数,表示初始时,棋子所在的节点编号。
节点编号从 1 到 N。
输出格式:
若先手胜,输出 win,否则输出 lose。
数据范围:
1≤N≤2000,
1≤M≤6000,
1≤K≤N

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 6010;int h[2010], ne[N], e[N];  //邻接表存图
int idx;
int f[2010];
void add(int x, int y)
{e[idx] = y, ne[idx] = h[x], h[x] = idx++;
}
int sg(int x)  //跑sg
{if (f[x] != -1)return f[x];set<int>se;for (int i = h[x]; i != -1; i = ne[i]){int y = e[i];se.insert(sg(y));}for (int i = 0;; i++)if (!se.count(i)){f[x] = i;break;}return f[x];
}
int main()
{   memset(h,-1,sizeof h);memset(f, -1, sizeof f);int n, m, k;cin >> n >> m >> k;for (int i = 0; i < m; i++){int x, y;cin >> x >> y;add(x, y);}int res = 0;for (int i = 0; i < k; i++)  //求异或和{int data;cin >> data;res ^= sg(data);}if (res == 0)puts("lose");else puts("win");return 0;
}

1319. 移棋子游戏(sg+图论(移棋子)邻接表)相关推荐

  1. 【图论】关于邻接表建图

    邻接表 作为一名现役Oier在做过无数图论题目和搜索题目之后,可以说是相当熟悉了,但是今天做的一道题,让我对于邻接表表示直接懵逼,原来在跑最短路的时候还是明白每个数组各自的作用的,然而一旦在其它题目中 ...

  2. [AcWing] 1319.移棋子游戏 博弈论 Sg函数板子题

    题目链接:1319.移棋子游戏 题解 好久没写博弈论的题了,写几道复习一下,博弈论SG主要由两大部分组成:SG函数和SG定理 SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S ...

  3. AcWing 1319. 移棋子游戏

    sg函数是一张有向无环图 尼姆博弈对每一张图sg(值)进行游戏 就是加强版的集合尼姆博弈(集合尼姆博弈中拓展是根据集合可能的新状态),这里是回归本质,sg操作是对每个状态拓展出边,并通过出边sg值集合 ...

  4. [博弈论]移棋子游戏

    https://www.acwing.com/problem/content/1321/ 思路: 求所有棋子的sg异或之和, 记忆化搜索 得到当前结点后继的这些点的sg值之和,放到set里面(哈希表也 ...

  5. 博弈论sg函数——《移旗子游戏》《剪纸游戏》

    传送门:移棋子游戏 思路:按照sg函数定义,在这道题里面,不能移动的状态就是终点态,sg值设为0,其余所有的点的sg函数值就是属于其所有后继节点的sg函数值组成的集合里面非集合元素的最小的一个数字,也 ...

  6. 51nod 1534 棋子游戏

    1534 棋子游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 http://www.51nod.com/onlineJudg ...

  7. 翻棋子游戏与Nim游戏

    翻棋子游戏: 题意:一个棋盘上每个格子有一个棋子,每次操作可以随便选一个朝上的棋子(x,y),代表第i行第j列的棋子,选择一个形 如(x,b)或(a,y)(其中b < y,a < x)的棋 ...

  8. 第33篇 Android Studio实现五子棋游戏(四)棋子类和主类

    第33篇 Android Studio实现五子棋游戏(四)棋子类和主类 1.棋子类 2.主类 2.1.变量 2.2.重写方法 2.3.代码 3.效果 3.1.进去界面 3.2.赢棋 3.3.提示 3. ...

  9. 【Qt象棋游戏】03_象棋棋子摆放

    文章目录 01 - 加载棋子UI资源 02 - 添加棋子属性类 03 - 添加棋子标签 04 - 效果 05 - 总结 棋子图片百度云链接: 01 - 加载棋子UI资源   添加制作好的棋子UI图片到 ...

最新文章

  1. 谷歌一员工确诊新冠肺炎:已大面积限制员工出行
  2. Linux下远程访问mysql数据库
  3. Sql Server触发器的使用
  4. [转载]我看到的最好的解释AngularJs中Factory和Service和Provide不同
  5. stringstream的基本用法
  6. 周末包邮送书和小红包中奖名单公布
  7. python3连接数据库步骤_Python3连接Mysql8.0遇到的问题及处理步骤
  8. Of Study - Francis Bacon
  9. ubuntu下安装与使用Log4cpp
  10. 杭电oj首字母变大写
  11. win7 安装 memcached
  12. 蓝桥杯 ALGO-83 算法训练 阶乘 java版
  13. 自动化测试 - 封装WebDriver的getDriver
  14. Clojure 学习入门(12)- map/pmap
  15. 软件工程小组第八次会议记录
  16. 马克思主义基本原理概述
  17. iOS常见错误1-SQLite错误-SQLITE_CANTOPEN,SQLITE_MISUSE和SQLITE_BUSY
  18. 探究斐波那契数列的通项公式
  19. $ is not a function
  20. 移动物联网卡资费标准,这样收费最划算

热门文章

  1. PTA 7-144 最矮的巨人
  2. Eolink 微光计划
  3. 配置文件中连接数据库
  4. requests出现InsecureRequestWarning解决
  5. 在Odunpazari现代博物馆,棉花糖激光盛宴以不同寻常的方式将自然带入生活
  6. Postman安装newman
  7. weblogic安装过程报错指导
  8. mysql数据库cpu占用特别高
  9. MATLAB学习笔记1——函数调用、参数传递、全局变量使用
  10. 46、W25Q128 存储器工作原理