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 & ...
随机推荐
- HTML利用posotion属性定位 小技巧
1.居中效果 父级DIV (index-top )属性设置为 text-align:center; 子级DIV( tabIndex-main)属性设置为 margin:0 auto; 2.左右对齐 ...
- 利用GDAL从内存中直接解析图像数据
对于网络数据源,调度中可以把数据写入本地,然后读取本地数据格式进行影像的解析(地形有时候也用tif等格式). 此种方式会每次调度进行不必要的IO开销和时间花费. GDAL提供了相应的接口,直接从内存中 ...
- PopupWindow 的常用api封装
对PopupWindow常用API的简单封装,几行代码就搞定PopupWindow弹窗,使用Builder模式,链式调用,像使用AlertDialog 一样 封装通用PopupWindow,Custo ...
- OkHttp2.0有Bug,暂时不推荐在产品中使用
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4078137.html 之前在博客里推荐使用OkHttp来替换 ...
- 网站换了HTTPS后残留部分http处理方式
网站换了HTTPS后残留部分http处理方式,以前添加的文章里面是有http的,导致浏览器打开网站的时候提示证书不安全,解决方法很简单 在html页面上加上这一段话 <!-- 强制让http的访 ...
- Jquery的跨域调用
JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念.当然,究其本质还是通过script标签动态加载js,似乎这是实现真正跨域的唯一方法. getJSON ...
- [翻译] BAFluidView
BAFluidView https://github.com/antiguab/BAFluidView This view and it's layer create a 2D fluid anima ...
- ajax Post数据,并得到返回结果,密码加密(Select,checkbox)
使用ajax Post数据到后台Server,并从后台返回数据给前端WEB: urls.py: from django.conf.urls import url from aptest import ...
- 【Alpha】Daily Scrum Meeting
一 博客集合贴 11月15日 [Alpha]Daily Scrum Meeting——blog1 11月18日 [Alpha]Daily Scrum Meeting——blog2 11月19日 [Al ...
- 解决Struts2 json-plugin Date或Timestamp等日期格式带T的问题
如果没有对日期时间对象类进行json日期格式声明,会出现类似"2013-06-18T12:08:56.23"日期,在日期中间多出一个T字母: 从通过查询数据,以及调试程序发现直到返 ...