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 }