hdu 1524 A Chess Game 博弈论

SG函数!!

代码如下:

 1 #include<stdio.h>
 2 #include<cstring>
 3 #define I(x) scanf("%d",&x)
 4 int map[1005][1005],sg[1005];
 5 int getsg(int n)
 6 {
 7     if(sg[n]!=-1) return sg[n];
 8     if(!map[n][0]) return sg[n]=0;
 9     bool vis[1001];
10     memset(vis,0,sizeof(vis));
11     for(int i=1;i<=map[n][0];i++)
12         vis[getsg(map[n][i])]=1;
13     int i=0;
14     while(vis[i]) i++;
15     return sg[n]=i;
16 }
17 int main(){
18     int i,t,n,s,k,j,m;
19     while(I(n)!=EOF){
20         for(i=0;i<n;i++){
21             I(map[i][0]);
22             for(j=1;j<=map[i][0];j++)
23                 I(map[i][j]);
24         }
25         memset(sg,-1,sizeof(sg));
26         while(I(m)&&m){
27             s=0;
28             for(i=0;i<m;i++){
29                 I(k);
30                 s^=getsg(k);
31             }
32             puts(s?"WIN":"LOSE");
33         }
34     }
35     return 0;
36 }
View Code
原文地址:https://www.cnblogs.com/xin-hua/p/3289346.html