移棋子游戏

该游戏是一个有向图游戏,每个棋子都是互相独立的,所以可以看成K个相同的棋盘,每个棋盘上有1个棋子。这样问题就转化成K个有向图游戏,求有向图游戏的和即可。即每个棋子的SG函数互相异或是否为0。

注意实际遍历时只要求一张图的SG函数值,由于是有向无环图而不是树,可能有多个起点,每个起点都要进行一遍搜索。

#include <iostream>
#include <cstring>
using namespace std;const int N = 2005, M = 6005;int n, m, k;
int x, y;
int nxt[M], lnk[M], head[N], idx;
bool flag[N];
int f[N];int dfs(int x) {if (f[x] != -1) return f[x];bool num[N];memset(num, 0, sizeof(num));for (int i = head[x]; i != -1; i = nxt[i]) {num[dfs(lnk[i])] = true;}for (int i = 0; i < n; i ++ ) {if (!num[i]) return f[x] = i;}
}int main() {scanf("%d%d%d", &n, &m, &k);memset(head, -1, sizeof(head));for (int i = 0; i < m; i ++ ) {scanf("%d%d", &x, &y);nxt[idx] = head[x];lnk[idx] = y;head[x] = idx ++ ;flag[y] = true;}memset(f, -1, sizeof(f));for (int i = 1; i <= n; i ++ ) {if (!flag[i]) {dfs(i);}}int ans = 0, c;for (int i = 0; i < k; i ++ ) {scanf("%d", &c);ans ^= f[c];}if (ans) printf("win\n");else printf("lose\n");return 0;
}

【刷题】数学知识——博弈论:移棋子游戏相关推荐

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

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

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

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

  3. C#LeetCode刷题-数学

    数学篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 (a ...

  4. ​LeetCode刷题实战546:移除盒子

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. 2018.09.16 loj#10243. 移棋子游戏(博弈论)

    传送门 题目中已经给好了sg图,直接在上面跑出sg函数即可. 最后看给定点的sg值异或和是否等于0就判好了. 代码: #include<bits/stdc++.h> #define N 2 ...

  6. 1319. 移棋子游戏(sg+图论(移棋子)邻接表)

    题目:https://www.acwing.com/problem/content/1321/ 给定一个有 N 个节点的有向无环图,图中某些节点上有棋子,两名玩家交替移动棋子. 玩家每一步可将任意一颗 ...

  7. AcWing 1319. 移棋子游戏

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

  8. 和海王一起从零刷题之(3):原地移除元素

    题目: 来源:leecode_27 简述:给定一个数组,要求不借助额外空间,移除指定元素,返回数组新的长度. 如: 输入:[4,5,5,4] 5 输出:[4,4] 2 难度 介于简单和中等之间, 主要 ...

  9. tag数组-刷题预备知识-4.一通百通解决二分查找问题

    文章目录 1. 二分法查找法的基本思想 2. 二分查找的时间复杂度 3. 二分查找的几个模版 3.1 模板一: 标准的二分查找 3.2 模板二: 二分查找边界(左边界, 右边界, 或是左右边界) 3. ...

  10. OJ 刷题必备知识总结(一)

    前言:本篇博客内容总结自<算法笔记>.文章篇幅太长了,更多的内容请读者点击这一篇:PTA 算法笔记重点总结(二). 文章目录 1 int 与 long long 2 字符常量 3 最大整数 ...

最新文章

  1. 惊呆了,Spring中竟然有12种定义bean的方法
  2. 一、select查询
  3. 排序算法【稳定性+空间复杂度+时间复杂度(平均、最好、最坏)】
  4. linux磁盘混乱,Linux磁盘设备文件混乱源于Linux内核自身
  5. 如何使用Angular FormBuilder
  6. [js] 写一个方法判断数组内元素是否全部相同
  7. 论文浅尝 | Know-Evolve: Deep Temporal Reasoning for Dynamic KG
  8. 服务器排序规修改办法,WordPress手动修改文章排列顺序摆脱按发布时间升降序排列...
  9. http状态码_一些常见的HTTP状态码
  10. ubuntu 修改IP,网关等
  11. android 人脸识别边框_Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地...
  12. 固态硬盘是什么接口_笔记本固态硬盘的接口有哪些?来学习下笔记本SSD小知识...
  13. 一文读懂Elephant Swap的LaaS方案的优势之处
  14. 每日必应壁纸API接口源码
  15. 使用Unity制作VR全景图片清晰度的问题!!!
  16. 用网线实现两台电脑之间的文件共享
  17. glusterfs之heketi 部署
  18. 三调地类图斑统计分析——GP后端实现
  19. gradle linux中文乱码,Gradle 构建 Android 应用常见问题解决指南
  20. Linux系统基本知识(4)

热门文章

  1. Linux基础之计算机网络
  2. BootStrap自定义小图标
  3. 每天学点5G-5G NEF
  4. Unity3D放破解反编译。DLL加密,mono解密。全程详解。
  5. 计算机指法标准,计算机键盘指法的正确练习步骤
  6. 思科模拟器vlan的划分
  7. Unity LOGO流光效果
  8. 如何做好计算机病毒的查杀,电脑中的木马病毒如何彻底查杀?
  9. Struts2 基础入门
  10. 新系统软件著作权申请详细步骤