UVA 11927 - Games Are Important

option=com_onlinejudge&Itemid=8&page=show_problem&category=478&problem=3078&mosmsg=Submission+received+with+ID+13891171" target="_blank" style="">题目链接

题意:给定一个有向图,结点上有一些石头,两人轮流移动石头。看最后谁不能移动就输了,问先手还后手赢

思路:求出每一个结点的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;
}

最新文章

  1. Java基础相关总结
  2. 计算机网络(6)-----运输层概述和UDP协议
  3. openssl,db,mysql,sasl编译安装
  4. linux多线程同步pthread_cond_XXX条件变量的理解
  5. 初识suse-Linux相关!
  6. Python语言精要---上
  7. ZOJ 1151 Word Reversal
  8. 各种html5 的 polyfill
  9. 国内IT技术博客对比
  10. 《暗黑世界GM管理后台系统》部署+功能说明
  11. hdu3308LCIS(线段树,点更新,段查寻,查寻时一定要注意跨越时如何计算)
  12. MAC中在eclipse luna上搭建移动平台自己主动化測试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
  13. Android getTopActivity的方法
  14. PHP&#183;笔记(函数总结)
  15. Java基础--异常处理
  16. OI养老专题02:约瑟夫问题求幸存者
  17. 《linux就该这么学》第四节课笔记,三章和四章开始!
  18. Redis学习--key的通用操作、移库操作、订阅与事务、持久化和总结
  19. 网页图表Highcharts实践教程之外层图表区
  20. 并发容器(四)ConcurrentHashMap 深入解析(JDK1.6)

热门文章

  1. 网页显示403. That’s an error的解决方法。
  2. centos7下配置tomcat开机启动
  3. Mysql--查询相关语句总结
  4. js+flash(as3)实现复制文字内容到剪切板实例
  5. mysql崩溃恢复
  6. socketserver模块使用方法
  7. 06-看图理解数据结构与算法系列(AVL树)
  8. 第一个web项目
  9. Eclipse Myeclipse 设定文件的默认打开方式
  10. 九度oj 题目1181:遍历链表