zoukankan      html  css  js  c++  java
  • UVA 11927

    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
    ", ans == 0?

    "Second":"First"); } return 0; }



  • 相关阅读:
    仙人球的残影
    Calculate the formula
    自定义代码段
    getter-setter方法练习
    封装
    Xcode文档安装
    Xcode模板修改
    匿名对象
    OC多文件开发介绍
    #pragma mark指令
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6933148.html
Copyright © 2011-2022 走看看