HDU 1524
思路:
算出来每个点的sg值,然后对于每个询问xor一下
//By SiriusRen #include <cstdio> #include <vector> using namespace std; const int N=1050; int n,m,xx,yy,sg[N],vis[N],tmp[N]; vector<int>vec[N]; void dfs(int x){ vis[x]=1; for(int i=0;i<vec[x].size();i++)dfs(vec[x][i]); for(int i=0;i<vec[x].size();i++)tmp[sg[vec[x][i]]]=1; for(int i=0;i<=n;i++)if(!tmp[i]){sg[x]=i;break;} for(int i=0;i<vec[x].size();i++)tmp[sg[vec[x][i]]]=0; } int main(){ while(~scanf("%d",&n)){ for(int i=0;i<n;i++){ scanf("%d",&xx); while(xx--)scanf("%d",&yy),vec[i].push_back(yy); } for(int i=0;i<n;i++)if(!vis[i])dfs(i); for(int i=0;i<n;i++)vec[i].clear(),vis[i]=0; while(scanf("%d",&m)&&m){ int ans=0; for(int i=1;i<=m;i++)scanf("%d",&xx),ans^=sg[xx]; puts(ans?"WIN":"LOSE"); } } }