UVA - 11927 Games Are Important (SG)
Description

| Games Are Important |
One of the primary hobbies (and research topics!) among Computing Science students at the University of Alberta is, of course, the playing of games. People here like playing games very much, but the problem is that the games may get solved completely--as happened
in the case of Checkers. Generalization of games is the only hope, but worries that they will be solved linger still. Here is an example of a generalization of a two player game which can also be solved.

Suppose we have a directed acyclic graph with some number of stones at each node. Two players take turns moving a stone from any node to one of its neighbours, following a directed edge. The player that cannot move any stone loses the game. Note that multiple
stones may occupy the same node at any given time.
Input
The input consists of a number of test cases. Each test case begins with a line containing two integers
n and m, the number of nodes and the number of edges respectively. (
1
n
1000,
0
m
10000).
Then, m lines follow, each containing two integers
a and b: the starting and ending node of the edge (nodes are labeled from 0 to
n - 1).
The test case is terminated by n more integers
s0,..., sn-1 (one per line), where
si represents the number of stones that are initially placed on node
i ( 0
si
1000).
Each test case is followed by a blank line, and input is terminated by a line containing `0 0' which should not be processed.
Output
For each test case output a single line with either the word ` First' if the first player will win, or the word `
Second' if the second player will win (assuming optimal play by both sides).
Sample Input
4 3
0 1
1 2
2 3
1
0
0
0 7 7
0 1
0 2
0 4
2 3
4 5
5 6
4 3
1
0
1
0
1
0
0 0 0
Sample Output
First
Second
有一个DAG(有向五环图)。每一个结点上都有一些石子。 两个玩家轮流把一个石头从一个结点沿着从此点出发的随意一条有向边移向相邻结点。不能移动的玩家算输掉游戏。注
意,在同一个时刻一个节点上能够有随意的石头。 思路:注意到,各个石头的状态的是全然独立的,所以这个游戏能够看做每个石头所形成的游戏的和。 对于每个石头,它的状态x就是所在的结点编号,假设此结点已经没有出发的边,则既是先手必败的状态,否则兴许状态就是相邻结点的SG值集合。 须要注意的是,对于在同一个结点来说。其上的石头假设个数为奇数。则当成1个石头就可以。假设为偶数,能够忽略不计。这是由异或运算的性质决定的。#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 10005; int n, m, sg[maxn];
vector<int> g[maxn]; int SG(int u) {
if (sg[u] != -1)
return sg[u]; int vis[maxn];
memset(vis, 0, sizeof(vis));
for (int i = 0; i < g[u].size(); i++) {
int tmp = SG(g[u][i]);
vis[tmp] = 1;
} for (int j = 0; ; j++)
if (!vis[j]) {
sg[u] = j;
break;
}
return sg[u];
} int main() {
int u, v;
while (scanf("%d%d", &n, &m) != EOF && n+m) {
memset(sg, -1, sizeof(sg));
for (int i = 0; i < maxn; i++)
g[i].clear(); for (int i = 0; i < m; i++) {
scanf("%d%d", &u, &v);
g[u].push_back(v);
} for (int i = 0; i < n; i++)
sg[i] = SG(i); int ans = 0, u;
for (int i = 0; i < n; i++) {
scanf("%d", &u);
if (u & 1)
ans ^= sg[i];
}
printf("%s\n", ans ? "First": "Second");
}
return 0;
}
UVA - 11927 Games Are Important (SG)的更多相关文章
- UVA 11927 - Games Are Important(sg函数)
UVA 11927 - Games Are Important option=com_onlinejudge&Itemid=8&page=show_problem&catego ...
- UVA 1482 - Playing With Stones(SG打表规律)
UVA 1482 - Playing With Stones 题目链接 题意:给定n堆石头,每次选一堆取至少一个.不超过一半的石子,最后不能取的输,问是否先手必胜 思路:数值非常大.无法直接递推sg函 ...
- UVA 10561 - Treblecross(博弈SG函数)
UVA 10561 - Treblecross 题目链接 题意:给定一个串,上面有'X'和'.',能够在'.'的位置放X.谁先放出3个'X'就赢了,求先手必胜的策略 思路:SG函数,每一个串要是上面有 ...
- Inside NGINX: How We Designed for Performance & Scale
NGINX leads the pack in web performance, and it’s all due to the way the software is designed. Where ...
- UNDERSTANDING THE GAUSSIAN DISTRIBUTION
UNDERSTANDING THE GAUSSIAN DISTRIBUTION Randomness is so present in our reality that we are used to ...
- UVA 11534 - Say Goodbye to Tic-Tac-Toe(博弈sg函数)
UVA 11534 - Say Goodbye to Tic-Tac-Toe 题目链接 题意:给定一个序列,轮流放XO,要求不能有连续的XX或OO.最后一个放的人赢.问谁赢 思路:sg函数.每一段.. ...
- hdoj 1729 Stone Games(SG函数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1729 看了题目感觉像Nim,但是有范围限制,有点不知道SG函数该怎么写 看了题解,最后才明白该怎么去理 ...
- UVa 10561 (SG函数 递推) Treblecross
如果已经有三个相邻的X,则先手已经输了. 如果有两个相邻的X或者两个X相隔一个.,那么先手一定胜. 除去上面两种情况,每个X周围两个格子不能再放X了,因为放完之后,对手下一轮再放一个就输了. 最后当“ ...
- uva 1378 A Funny Stone Game (博弈-SG)
题目链接:http://vjudge.net/problem/viewProblem.action?id=41555 把第i堆的每个石子看出一堆个数为n-i的石子,转换为组合游戏 #include & ...
随机推荐
- php5.5过渡--mysql连接
以前: // $conn=mysql_connect("localhost","root","");// $db=mysql_select_ ...
- Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类
Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...
- ES6-fetch
fetch 事实标准,并不存在与ES6规范中,基于Promise实现. 目前项目中对Promise的兼容性尚存在问题,如果在项目中应用fetch,需要引入es6-promise和fetch. fis3 ...
- 解决MyEclipse不能导出war包
原因:无法导出是由于软件破解不完成导致的: 解决办法: 找到MyEclipse安装目录下MyEclipse\Common\plugins文件夹中的com.genuitec.eclipse.export ...
- is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
出现此日志的原因: https://blog.csdn.net/m0_37962779/article/details/78605478 上面的博客中可能解决了他的问题,可我的项目是spring bo ...
- 由delete导致的超时已过期问题
1. 问题 开发人员反映应用程序中一条简单的delete语句执行报“超时已过期”错误.delete语句形式如下: delete * from table_1 where id=@value 2. 分析 ...
- 32位Windows7 利用多余的不能识别的电脑内存 RAMDISK5.5教程
32位Windows7 利用多余的不能识别的电脑内存 RAMDISK5.5教程 环境:Windows7 32位 Ultimate 内存8GB 只能识别2.95GB内存 ramdisk5.5只适用于Wi ...
- PHP接收IOS post过来的json数据无法解析的问题
在本地环境下运行解析OK 换到线上的环境解析失败 开始怀疑各种编码问题,解决均无效. 查看phpinfo 发现magic_quotes_gpc =on 终于找到问题所在,更改php.ini文件 mag ...
- Django之自定义权限
官方解释 Custom permissions¶ To create custom permissions for a given model object, use the permissions ...
- 【Oracle】PL/SQL Developer使用技巧(持续更新中)
1.关键字自动大写 在sql命令窗口中输入SQL语句时,想要关键字自动大写,引人注目该怎么办呢? 一步设置就可以达成了.点击Tools->Preference->Editor,看到截图中这 ...