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 & ...
随机推荐
- mysqli 更新&插入操作及事务
$mysqli = new mysqli('localhost', 'root', '1234', 'shop'); $query1 = " update sw_goods set good ...
- iframe的探讨
用法 1.iframe是用来在网页中插入第三方页面,早期的页面使用iframe主要是用于导航栏这种很多页面都相同的部分,这样在切换页面的时候避免重复下载. 优点 1.便于修改,模拟分离,像一些信息管理 ...
- L3(SP+OO+UT)能力评估
- AR中的SLAM(一)
写在前面 本系列打算讲讲个人对AR行业和AR中的SLAM算法的一点浅显的看法.才疏学浅,文中必然有很多疏漏和不足,还望能和大家多多讨论.今天先讲讲我对AR的一些认识. AR的一点理解 AR是什么 AR ...
- linux中文字体
◆ 背景说明 报表,在windows下,展现.导出都正常,在linux下,字体变大了.比如,单元格的大小设计好后,里面的字当好能一行显示完,将报表放到linux下后,字变大了,一行显示不完了,变 ...
- ORACLE学习文档
转自 http://sparklet.blog.sohu.com/523655.html 数据库被分成一个或多个逻辑部件称作表空间.而表空间又被分成称作段(segment)的逻辑部件.这些段再细分就叫 ...
- Spring手册
一.Spring 简介 二.结构体系 三.七大主要模块 四.Spring Maven依赖 五 .Sprinf framework 一.Spring 简介 spring是一个开源的轻量级的应用开发框架, ...
- Linux 运维工程师一定要知道的六类好习惯和23个教训
一.线上操作规范 1.测试使用当初学习Linux的使用,从基础到服务到集群,都是在虚拟机做的,虽然老师告诉我们跟真机没有什么差别,可是对真实环境的渴望日渐上升,不过虚拟机的各种快照却让我们养成了各种手 ...
- 机器学习中正则惩罚项L0/L1/L2范数详解
https://blog.csdn.net/zouxy09/article/details/24971995 原文转自csdn博客,写的非常好. L0: 非零的个数 L1: 参数绝对值的和 L2:参数 ...
- 将虚拟网络连接到 ExpressRoute 线路
本文通过使用 Resource Manager 部署模型和 Azure 门户,帮助将虚拟网络 (VNets) 链接到 Azure ExpressRoute 线路. 虚拟网络可以在同一个订阅中,也可以属 ...