首页 > 代码库 > pku 2425 A Chess Game (SG)

pku 2425 A Chess Game (SG)

题意:

给一个由N个点组成的一张有向图,不存在环。点的编号是0~N-1。

然后给出M个棋子所在的位置(点的编号)【一个点上可同时有多个棋子】。

每人每次可移动M个棋子中的一个棋子一步,移动方向是有向边指向的方向。最后无法移动棋子的人输。

 

思路:

一眼就可看出的裸的SG,直接看代码吧。

 

代码:

int sg[1005];vector<int> graph[1005];int dfs(int x){ // position x    if(sg[x]!=-1)        return sg[x];    int L=graph[x].size();    if(L==0)        return sg[x]=0;    bool vis[1005] = {0};    rep(i,0,L-1){        vis[dfs(graph[x][i])] = true;    }    for(int i=0;;++i){        if(!vis[i])            return sg[x]=i;    }}int n,Xi,a,m,pos;int main(){    while(scanf("%d",&n)!=EOF){        rep(i,0,n-1) graph[i].clear();        rep(i,0,n-1){            scanf("%d",&Xi);            while(Xi--){                scanf("%d",&a);                graph[i].push_back(a);            }        }        mem(sg,-1);        while(scanf("%d",&m),m){            int ans=0;            rep(i,1,m){                scanf("%d",&pos);                ans=ans^dfs(pos);            }            if(!ans)                puts("LOSE");            else                puts("WIN");        }    }}

 

pku 2425 A Chess Game (SG)