zoukankan      html  css  js  c++  java
  • poj2425--A Chess Game

    题意:给定一棵有向图的树,有些节点上有石子,每次可以取一个石子向一个有向边移动,不能移动者负。

    Ans:树上nim,叶子节点nim为0,父亲节点递归儿子得到sg值,答案就是每个石子所在点的sg值异或和。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<string>
     6 #include<algorithm>
     7 int sg[1005],s[1005],n,x,ans,m;
     8 int tot,go[1005*2005],first[1005],next[1005*2005],ru[1005],num;
     9 void insert(int x,int y){
    10     tot++;
    11     go[tot]=y;
    12     next[tot]=first[x];
    13     first[x]=tot;
    14 }
    15 int dfs(int x){
    16     if (s[x]!=-1) return s[x];
    17     //if (first[x]==0) return s[x]=0;
    18     int ss[1024];
    19     memset(ss,0,sizeof ss);
    20     for (int i=first[x];i;i=next[i]){
    21         int pur=go[i];
    22         ss[dfs(pur)]=1;
    23     }
    24     for (int i=0;i<=n+1;i++)
    25      if (ss[i]==0) return s[x]=i;
    26 }
    27 int main(){
    28     freopen("tx.in","r",stdin);
    29     while (~scanf("%d",&n)){
    30     memset(s,-1,sizeof s);
    31     memset(first,0,sizeof first);
    32     memset(ru,0,sizeof ru);
    33     tot=0;
    34     for (int i=0;i<n;i++){
    35         scanf("%d",&num);
    36         for (int j=1;j<=num;j++){
    37          scanf("%d",&x);
    38          insert(i,x); 
    39          ru[x]++;
    40         }
    41     }
    42     for (int i=0;i<n;i++)
    43      if (ru[i]==0){
    44          s[i]=dfs(i);
    45      }
    46     while (scanf("%d",&m)&&m){
    47     ans=0;
    48     for (int i=1;i<=m;i++){
    49         scanf("%d",&x);
    50         ans^=s[x];
    51     } 
    52     if (ans) printf("WIN
    ");
    53     else printf("LOSE
    ");
    54     }
    55     }
    56 }
  • 相关阅读:
    CSS 引入方式
    css的选择器效率分析
    CSS样式优先级
    JSONP
    javascript跨域的几种方法
    精确获取对象的类型:Object.prototype.toString()
    MooseFS
    使用tmpfs作为缓存加速缓存的文件目录
    nginx auth
    memcached
  • 原文地址:https://www.cnblogs.com/qzqzgfy/p/5266782.html
Copyright © 2011-2022 走看看