poj 2425 A Chess Game 博弈论
思路:SG函数应用!!
代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<vector> 5 #include<cstring> 6 using namespace std; 7 int sg[1001],n; 8 vector<int>p[1001]; 9 int dfs(int now) 10 { 11 if(sg[now]!=-1) return sg[now]; 12 bool vis[1001]={0}; 13 for(int i=0;i<p[now].size();i++) 14 vis[dfs(p[now][i])]=1; 15 int i=0; 16 while(vis[i]) i++; 17 return sg[now]=i; 18 } 19 int main() 20 { 21 int a,b,q,k; 22 while(scanf("%d",&n)!=EOF){ 23 memset(sg,-1,sizeof(sg)); 24 for(int i=0;i<n;i++){ 25 scanf("%d",&a); 26 p[i].clear(); 27 for(int j=0;j<a;j++){ 28 scanf("%d",&b); 29 p[i].push_back(b); 30 } 31 } 32 while(scanf("%d",&q)&&q){ 33 int ans=0; 34 for(int i=0;i<q;i++){ 35 scanf("%d",&k); 36 ans^=dfs(k); 37 } 38 puts(ans?"WIN":"LOSE"); 39 } 40 } 41 return 0; 42 }