SG的模板题,不多说。
这里采用记忆化深搜优化。Time=15ms还不错。
#include<iostream>
#include<algorithm>
using namespace std;struct EDGE
{int v,next;
}E[11111111];int ptr[1111],Enum;
int sg[1111];
void addEdge( int u,int v )
{E[Enum].v=v;E[Enum].next=ptr[u];ptr[u]=Enum++;
}int SG( int sit )
{if( sg[sit]!=-1 )return sg[sit];int flag[1111];memset( flag,0,sizeof(flag) );for( int i=ptr[sit];i!=-1;i=E[i].next )flag[SG(E[i].v)]=1;for( int i=0;i<1111;i++ )if( flag[i]==0 )return sg[sit]=i;
}int main()
{int N;while( scanf("%d",&N)!=EOF ){Enum=0;memset( ptr,-1,sizeof(ptr) );for( int i=0;i<N;i++ ){int outp,v;scanf( "%d",&outp );for( int j=0;j<outp;j++ ){scanf( "%d",&v );addEdge(i,v);}}memset( sg,-1,sizeof(sg) );int chessnum;while( scanf("%d",&chessnum)!=EOF,chessnum ){int xo=0;int sit;for( int i=0;i<chessnum;i++ ){scanf("%d",&sit);xo^=SG(sit);}printf( "%s\n",xo?"WIN":"LOSE" );}}return 0;
}