POJ - 2599 A funny game NP状态定理

题目:有一棵无向树,从某个结点出发,两个人轮流移动,走过的结点不能再走,不能移动的人输。判断先手必胜还是先手必败,如果先手必胜,输出必胜到达的节点。

思路:利用NP状态定理,把起点的SG值算出来。

代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template T f_abs(T a){ return a > 0 ? a : -a; }
template T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f
//0x3f3f3f3f

const int maxn=1e3+5;
vector G[maxn];
int sg[maxn];
int get_sg(int u,int fa){
    if(sg[u]!=-1)
        return sg[u];
    sg[u]=0;
    for(int i=0;i0){
            int id=n+1;
            for(int i=0;i


你可能感兴趣的:(博弈)