/*
无环图,树
计算 sg值,求出每个节点处得sg值来
*/
#include <cstdio>
#include <vector>
using namespace std;
int N,M,Q;
int sg[1010];
vector<int> G[1010];
int dfs(int x)
{
int& cur = sg[x];
if(cur!=-1) return cur;
cur = 0;
bool used[1010]={0};
for(int t,i=G[x].size()-1;i>=0;i--)
{
used[ dfs(G[x][i]) ] = 1;
}
for(int i=0;;i++)
{
if(!used[i])
{
cur = i;
break;
}
}
return cur ;
}
int main()
{
int a;
while( scanf("%d",&N)==1 )
{
for(int i=0;i<N;i++)
{
G[i].clear();
scanf("%d",&M);
while(M--)
{
scanf("%d",&a);
G[i].push_back(a);
}
}
memset(sg,-1,sizeof(sg));
int ans;
while(scanf("%d",&Q)&&Q)
{
ans = 0;
for(int i=0;i<Q;i++)
{
scanf("%d",&a);
ans ^= dfs(a);
}
if(ans) printf("WIN\n");
else printf("LOSE\n");
}
}
return 0;
}
转载于:https://www.cnblogs.com/ac2012/archive/2011/06/16/2083205.html