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 }
View Code

 

 

 

你可能感兴趣的:(game)