【POJ2425】A Chess Game 博弈,SG函数,裸题,模板题

来源:互联网 发布:网络名誉侵权案例 编辑:程序博客网 时间:2024/05/22 05:13

转载请注明出处:http://blog.csdn.net/vmurder/article/details/42653921
其实我就是觉得原创的访问量比未授权盗版多有点不爽233。。。

题意:给一个有向无环图(拓扑图),有若干个棋子,两人轮流操作,每次可以把其中某棋子沿图走一步,无法操作者输。

题解:SG函数裸题,模板题

代码:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 1005using namespace std;bool map[N][N];int n,q,d[N];int SG[N];void dfs(int x){int i,j,k;bool vis[N]={0};for(i=0;i<n;i++)if(map[x][i]){if(SG[i]==-1)dfs(i);vis[SG[i]]=1;}for(i=0;vis[i];i++);SG[x]=i;}int main(){//freopen("test.in","r",stdin);int i,j,k,a;while(scanf("%d",&n)!=EOF){memset(map,0,sizeof(map));memset(SG,-1,sizeof(SG));for(i=0;i<n;i++){scanf("%d",&d[i]);for(j=1;j<=d[i];j++){scanf("%d",&a);map[i][a]=1;}}for(i=0;i<n;i++)if(SG[i]==-1)dfs(i);while(scanf("%d",&q),q){k=0;while(q--){scanf("%d",&a);k^=SG[a];}if(k)puts("WIN");else puts("LOSE");}}return 0;}



0 0
原创粉丝点击