UVA 11927 - Games Are Important(sg函数)
2024-09-30 18:28:11
UVA 11927 - Games Are Important
题意:给定一个有向图,结点上有一些石头,两人轮流移动石头。看最后谁不能移动就输了,问先手还后手赢
思路:求出每一个结点的sg函数,然后偶数个石头结点能够不用考虑,由于对于偶数情况,总步数肯定能保证是偶数,所以仅仅要考虑奇数情况的结点
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std; const int N = 1005;
int n, m, sg[N];
vector<int> g[N]; int dfs(int u) {
if (sg[u] != -1) return sg[u];
if (g[u].size() == 0) return sg[u] = 0;
bool vis[N];
memset(vis, false, sizeof(vis));
for (int i = 0; i < g[u].size(); i++)
vis[dfs(g[u][i])] = true;
for (int i = 0; ; i++)
if (!vis[i]) return sg[u] = i;
} int main() {
while (~scanf("%d%d", &n, &m) && n || m) {
int u, v;
memset(g, 0, sizeof(g));
memset(sg, -1, sizeof(sg));
while (m--) {
scanf("%d%d", &u, &v);
g[u].push_back(v);
}
for (int i = 0; i < n; i++)
dfs(i);
int ans = 0, num;
for (int i = 0; i < n; i++) {
scanf("%d", &num);
if (num&1)
ans ^= sg[i];
}
printf("%s\n", ans == 0? "Second":"First");
}
return 0;
}
最新文章
- Java基础相关总结
- 计算机网络(6)-----运输层概述和UDP协议
- openssl,db,mysql,sasl编译安装
- linux多线程同步pthread_cond_XXX条件变量的理解
- 初识suse-Linux相关!
- Python语言精要---上
- ZOJ 1151 Word Reversal
- 各种html5 的 polyfill
- 国内IT技术博客对比
- 《暗黑世界GM管理后台系统》部署+功能说明
- hdu3308LCIS(线段树,点更新,段查寻,查寻时一定要注意跨越时如何计算)
- MAC中在eclipse luna上搭建移动平台自己主动化測试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
- Android getTopActivity的方法
- PHP&#183;笔记(函数总结)
- Java基础--异常处理
- OI养老专题02:约瑟夫问题求幸存者
- 《linux就该这么学》第四节课笔记,三章和四章开始!
- Redis学习--key的通用操作、移库操作、订阅与事务、持久化和总结
- 网页图表Highcharts实践教程之外层图表区
- 并发容器(四)ConcurrentHashMap 深入解析(JDK1.6)