HDU 1524 A Chess Game【SG函数】
题意:一个N个点的拓扑图,有M个棋子,两个人轮流操作,每次操作可以把一个点的棋子移动到它的一个后继点上(每个点可以放多个棋子),直到不能操作,问先手是否赢。
思路:DFS求每个点的SG值,没有后继的点为必败点。
注意搜索中初始化的问题。
#include<stdio.h>
#include<string.h>
const int N=,M=N*N;
struct node{
int v,next;
}e[M];
int head[N],cnt,in[N],out[N],n,sg[N],p[N];
void add(int u,int v){
e[cnt].v=v,e[cnt].next=head[u];
head[u]=cnt++;
}
int SG(int u){
if(!out[u]) return sg[u]=;
for(int i=head[u];i!=-;i=e[i].next){
int v=e[i].v;
if(sg[v]==-) sg[v]=SG(v);
}
memset(p,,sizeof(p));
for(int i=head[u];i!=-;i=e[i].next){
p[sg[e[i].v]]=;
}
for(int i=;i<n;i++){
if(!p[i]){
return sg[u]=i;
}
}
}
int main(){
int m,k,i,u,v;
while(~scanf("%d",&n)){
memset(head,-,sizeof(head));
memset(sg,-,sizeof(sg));
memset(in,,sizeof(in));
cnt=;
for(i=;i<n;i++){
scanf("%d",&k);out[i]=k;
while(k--){
scanf("%d",&v);
add(i,v);in[v]++;
}
}
for(i=;i<n;i++){
if(!in[i]){
SG(i);
}
}
while(~scanf("%d",&m)&&m){
int ans=;
while(m--){
scanf("%d",&u);
ans^=sg[u];
}
if(ans) puts("WIN");
else puts("LOSE");
}
}
return ;
}
HDU 1524 A Chess Game【SG函数】的更多相关文章
- HDU 5724 Chess(SG函数+状态压缩)
		
http://acm.split.hdu.edu.cn/showproblem.php?pid=5724 题意: 现在有一个n*20的棋盘,上面有一些棋子,双方每次可以选择一个棋子把它移动到其右边第一 ...
 - HDU 5724 Chess(SG函数)
		
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
 - hdu 1524 A Chess Game 博弈论
		
SG函数!! 代码如下: #include<stdio.h> #include<cstring> #define I(x) scanf("%d",& ...
 - (step 8.2.13)hdu 1524(A Chess Game)
		
题目大意 : 在一个 有向无环图顶点上面有几个棋子, 2个人轮流操作, 每次操作就是找一个棋子往它能够移 动的地方移动一格, 不能操作的人输. 输入第一行 为一个 N , 表示有 N 个顶点 0 -& ...
 - HDU 1517 A Multiplication Game (SG函数找规律)
		
题意:两个玩家玩一个游戏,从 p = 1,开始,然后依次轮流选择一个2 - 9的数乘以 p,问你谁先凑够 p >= n. 析:找规律,我先打了一下SG函数的表,然后就找到规律了 我找到的是: 1 ...
 - HDU 1536 S-Nim (组合游戏+SG函数)
		
题意:针对Nim博弈,给定上一个集合,然后下面有 m 个询问,每个询问有 x 堆石子 ,问你每次只能从某一个堆中取出 y 个石子,并且这个 y 必须属于给定的集合,问你先手胜还是负. 析:一个很简单的 ...
 - hdu 1847 博弈基础题 SG函数 或者规律2种方法
		
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
 - 2016多校联合训练1 B题Chess (博弈论 SG函数)
		
题目大意:一个n(n<=1000)行,20列的棋盘上有一些棋子,两个人下棋,每回合可以把任意一个棋子向右移动到这一行的离这个棋子最近的空格上(注意这里不一定是移动最后一个棋子),不能移动到棋盘外 ...
 - HDU 5724 Chess (sg函数)
		
Chess 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5724 Description Alice and Bob are playing a s ...
 
随机推荐
- 【C#】ConcurrentBag<T> 方法
			
转载自MSDN. ConcurrentBag<T> 类型公开以下成员. 方法 显示: 继承 保护 名称 说明 Add 将对象添加到 ConcurrentBag<T> ...
 - SQL SERVER2012附加 (PS:开始试过sql2012直接附加失败)
			
Northwind 示例数据库下载: NORTHWND.MDF (PS:开始试过sql2012直接附加失败) 新建查询-执行下面代码 USE [master] GO CREATE DATABAS ...
 - 在DirectShow中支持DXVA 2.0(Supporting DXVA 2.0 in DirectShow)
			
这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.并准备记录一下用ffmpeg实现dxva2,将在第三篇写到.这是第二篇.,英文原址:https://msdn.microso ...
 - Understanding glibc malloc【待译】
			
今天尝试用Valgrind调试程序时,发现堆和栈的一些问题没有理解透彻,于是Google了下"Memory Layout C",接着就通过Memory Layout of C Pr ...
 - JS高程3.基本概念(4)操作符
			
ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...
 - SVG简介
			
最近遇到SVG这个名词,于是查阅资料,做个笔记. 前言 图片的数字化.将图片存储为数据有两种方案. 位图.也被称为光栅图.即是以自然的光学的眼光将图片看成在平面上密集排布的点的集合.每个点发出的光有独 ...
 - 原生JS实战:分享一个首页进度加载动画!
			
本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5871134.html 该程序是本人的个人作品,写的不好,可以参考,但未经 ...
 - iOS 怎么设置 UITabBarController 的第n个item为第一响应者?
			
iOS 怎么设置 UITabBarController 的第n个item为第一响应者? UITabBarController 里面有个属性:selectedIndex @property(nonato ...
 - iOS 证书Bug The identity used to sign the executable is no longer valid 解决方案
			
现象:The identity used to sign the executable is no longer valid Please verify that your device’s cloc ...
 - IIS10中使用OpenSSL来创建CA并且签发SSL证书
			
参考: http://www.cnblogs.com/lierle/p/5140187.html http://alvinhu.com/blog/2013/06/12/creating-a-certi ...