题目大意 : 在一个 有向无环图顶点上面有几个棋子, 2个人轮流操作, 每次操作就是找一个棋子往它能够移

动的地方移动一格, 不能操作的人输. 输入第一行 为一个 N , 表示有 N 个顶点 0 -> N-1 标记, 然后

接下来的N 行 代表 与第 i 行 相连的有哪几个顶点 , 每一行开头一个 M 表示 有M 哥点与 点 i 相连.

然后接下来是 任意个询问, 一开始 是一个 M, 表示棋盘初始有 M 个棋子, 接下来的 M 个数 表示顶点i 上

有棋子, M == 0 代表询问结束

解题思路:

1)有N个位置,其中存在拓扑关系,移动时必须遵守。最后移动者胜,问是否有必胜策略

拓扑关系,说明是一个有向无环图。那么对于某个点的SG函数,便是他的后继结点中没有出现的最小的。(MEX操作),完全就是名字悬乎一点

和求普通的SG函数一样。

2)

vector<int> v[maxn];

以上一行代码定义了一个数组v,这个数组中的每一个元素都是一个向量(vector)

代码如下:

/*
* 1524_1.cpp
*
* Created on: 2013年9月2日
* Author: Administrator
*/
#include <iostream>
#include <vector>
using namespace std; const int maxn = 1005;
int n;
vector<int> v[maxn];
int sg[maxn]; int getSG(int n){
if(sg[n] != -1){
return sg[n];
}
if(v[n].size() == 0){
return 0;
} bool visited[maxn];
memset(visited,0,sizeof(visited)); int i;
for(i = 0 ; i < v[n].size() ; ++i){
sg[v[n][i]] = getSG(v[n][i]);
visited[sg[v[n][i]]] = true;
} for(i = 0 ; ; ++i){
if(!visited[i]){
return i;
}
}
} int main(){
while(scanf("%d",&n)!=EOF){
memset(sg,-1,sizeof(sg)); int i;
for(i = 0 ; i < n ; ++i){
v[i].clear();
int k;
scanf("%d",&k);
while(k--){
int a;
scanf("%d",&a);
v[i].push_back(a);
}
} int m;
while(scanf("%d",&m)!=EOF,m){
int ans = 0;
while(m--){
int num ;
scanf("%d",&num);
ans ^= getSG(num);
} if(ans == 0){
printf("LOSE\n");
}else{
printf("WIN\n");
}
}
}
}

(step 8.2.13)hdu 1524(A Chess Game)的更多相关文章

  1. HDU 1524 A Chess Game【SG函数】

    题意:一个N个点的拓扑图,有M个棋子,两个人轮流操作,每次操作可以把一个点的棋子移动到它的一个后继点上(每个点可以放多个棋子),直到不能操作,问先手是否赢. 思路:DFS求每个点的SG值,没有后继的点 ...

  2. hdu 1524 A Chess Game 博弈论

    SG函数!! 代码如下: #include<stdio.h> #include<cstring> #define I(x) scanf("%d",& ...

  3. hdu 1524 A Chess Game 博弈

    题目链接 给出一个有向无环图, 上面放有一些棋子, 两个人轮流移动棋子, 当一个人无法移动时, 算输. 求出每一个点的sg值, 异或就可以.出度为0的点sg值为0. #include<bits/ ...

  4. HDU 1524 树上无环博弈 暴力SG

    一个拓扑结构的图,给定n个棋的位置,每次可以沿边走,不能操作者输. 已经给出了拓扑图了,对于每个棋子找一遍SG最后SG和就行了. /** @Date : 2017-10-13 20:08:45 * @ ...

  5. A Chess Game HDU - 1524 (有向图博弈)

    题意:在一个有向无环图上有n个顶点,每一个顶点都只有一个棋子,有两个人,每次根据这个图只能将任意一颗棋子移动一步 ,如果到某一步玩家不能移动时,那么这个人就输. 分析:本题是最典型的有向无环图的博弈, ...

  6. HDU 4405 Aeroplane chess 期望dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 Aeroplane chess Time Limit: 2000/1000 MS (Java/ ...

  7. HDU 5724:Chess(博弈 + 状压)

    http://acm.hdu.edu.cn/showproblem.php?pid=5724 Chess Problem Description   Alice and Bob are playing ...

  8. hdu 4405 Aeroplane chess(简单概率dp 求期望)

    Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. 【百题留念】hdoj 1524 A Chess Game(dfs + SG函数应用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1524 #include<stdio.h> #include<cstring> ...

随机推荐

  1. Cookie 路径在本机测试及服务器部署,在浏览器处理方式上的不同

    Table of Contents 1 问题场景 2 解决过程 2.1 cookie是否设置成功 2.2 cookie是否上传到服务器 3 总结 1 问题场景 最近在学用Python进行web开发,写 ...

  2. Cocos2dx3.1 获取当前系统时间

    以下是获代替码 原文地址:http://blog.csdn.net/qqmcy/article/details/28233565 // // Tools.h // // // Created by 杜 ...

  3. PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题

    在项目中要用ZipArchive解压ZIP文件,起初測试环境在WINDOWS平台中,測试通过,换到 LINUX+nginx 的环境中时 就出问题了(ZIP包中有文件和目录一共3百多个文件,大部分是带汉 ...

  4. jstl标签经典

    1. <c:out> 库 :Core(核心库) URI : http://java.sun.com/jsp/jstl/core 前缀 : c 描述 :<c:out> 标签是一个 ...

  5. ASM - 条件判断

    技术交流,DH讲解. 正式之前,我们看看寄存器和CPU的标志位: OD中的截图,下方的CPAZSTDO就是标志位. Delphi的FPU窗口,右边一列就是标志位.为什么要给大家看标志位呢?因为ASM中 ...

  6. AssertValid函数学�

    转自http://tsitao.blog.163.com/blog/static/29795822006914105840496/ VC的调试中,AssertValid和Dump函数的应用 CObje ...

  7. Python中字符串的方法及注释

    先整理到这里:用的时候便于查询.相当于自己的资料库吧. capitalize()   把字符串的第一个字符改为大写 casefold()   把整个字符串的所有字符改为小写 center(width) ...

  8. JSP的学习(8)——JSP标签

    JSP标签也称为JSP Action(JSP动作)元素,用于在JSP页面中封装Java代码,这样使得在JSP页面中避免直接编写Java代码,让JSP真正成为MVC模式中的作为视图作用. 几个JSP常用 ...

  9. CButtonEx的实现

    要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制.这可以通过定义一个以CButton为基类的新按钮类来实现.以下为具体的实现方法: 方法一: 加入一个新类,类名:CB ...

  10. Eclipse无提示的解决办法 和 内容辅助技巧

    Eclipse无提示的解决办法 和 内容辅助技巧 一.若发现内容辅助失效没有提示 下面是解决办法,现贴出来与大家共享:       1.菜单window->Preferences->Jav ...