1319. 移棋子游戏(sg+图论(移棋子)邻接表)
题目: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+图论(移棋子)邻接表)相关推荐
- 【图论】关于邻接表建图
邻接表 作为一名现役Oier在做过无数图论题目和搜索题目之后,可以说是相当熟悉了,但是今天做的一道题,让我对于邻接表表示直接懵逼,原来在跑最短路的时候还是明白每个数组各自的作用的,然而一旦在其它题目中 ...
- [AcWing] 1319.移棋子游戏 博弈论 Sg函数板子题
题目链接:1319.移棋子游戏 题解 好久没写博弈论的题了,写几道复习一下,博弈论SG主要由两大部分组成:SG函数和SG定理 SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S ...
- AcWing 1319. 移棋子游戏
sg函数是一张有向无环图 尼姆博弈对每一张图sg(值)进行游戏 就是加强版的集合尼姆博弈(集合尼姆博弈中拓展是根据集合可能的新状态),这里是回归本质,sg操作是对每个状态拓展出边,并通过出边sg值集合 ...
- [博弈论]移棋子游戏
https://www.acwing.com/problem/content/1321/ 思路: 求所有棋子的sg异或之和, 记忆化搜索 得到当前结点后继的这些点的sg值之和,放到set里面(哈希表也 ...
- 博弈论sg函数——《移旗子游戏》《剪纸游戏》
传送门:移棋子游戏 思路:按照sg函数定义,在这道题里面,不能移动的状态就是终点态,sg值设为0,其余所有的点的sg函数值就是属于其所有后继节点的sg函数值组成的集合里面非集合元素的最小的一个数字,也 ...
- 51nod 1534 棋子游戏
1534 棋子游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 http://www.51nod.com/onlineJudg ...
- 翻棋子游戏与Nim游戏
翻棋子游戏: 题意:一个棋盘上每个格子有一个棋子,每次操作可以随便选一个朝上的棋子(x,y),代表第i行第j列的棋子,选择一个形 如(x,b)或(a,y)(其中b < y,a < x)的棋 ...
- 第33篇 Android Studio实现五子棋游戏(四)棋子类和主类
第33篇 Android Studio实现五子棋游戏(四)棋子类和主类 1.棋子类 2.主类 2.1.变量 2.2.重写方法 2.3.代码 3.效果 3.1.进去界面 3.2.赢棋 3.3.提示 3. ...
- 【Qt象棋游戏】03_象棋棋子摆放
文章目录 01 - 加载棋子UI资源 02 - 添加棋子属性类 03 - 添加棋子标签 04 - 效果 05 - 总结 棋子图片百度云链接: 01 - 加载棋子UI资源 添加制作好的棋子UI图片到 ...
最新文章
- 谷歌一员工确诊新冠肺炎:已大面积限制员工出行
- Linux下远程访问mysql数据库
- Sql Server触发器的使用
- [转载]我看到的最好的解释AngularJs中Factory和Service和Provide不同
- stringstream的基本用法
- 周末包邮送书和小红包中奖名单公布
- python3连接数据库步骤_Python3连接Mysql8.0遇到的问题及处理步骤
- Of Study - Francis Bacon
- ubuntu下安装与使用Log4cpp
- 杭电oj首字母变大写
- win7 安装 memcached
- 蓝桥杯 ALGO-83 算法训练 阶乘 java版
- 自动化测试 - 封装WebDriver的getDriver
- Clojure 学习入门(12)- map/pmap
- 软件工程小组第八次会议记录
- 马克思主义基本原理概述
- iOS常见错误1-SQLite错误-SQLITE_CANTOPEN,SQLITE_MISUSE和SQLITE_BUSY
- 探究斐波那契数列的通项公式
- $ is not a function
- 移动物联网卡资费标准,这样收费最划算