首页 > 其他 > 详细

pku 2425 A Chess Game (SG)

时间:2014-10-03 12:04:04      阅读:305      评论:0      收藏:0      [点我收藏+]

题意:

给一个由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)

原文:http://www.cnblogs.com/fish7/p/4004794.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!