简单sg函数
#include<iostream> #include<algorithm> #include<cstdio> #include<unordered_set> #include<cstring> using namespace std; const int N=1e4; int h[N],e[N],ne[N],idx; int f[N]; void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++; } int sg(int x){ if(f[x]!=-1) return f[x]; int i; unordered_set<int> s; for(i=h[x];i!=-1;i=ne[i]){ int j=e[i]; s.insert(sg(j)); } for(i=0;;i++){ if(!s.count(i)) return f[x]=i; } } int main(){ int n,m,k; cin>>n>>m>>k; int i; memset(f,-1,sizeof f); memset(h,-1,sizeof h); for(i=0;i<m;i++){ int u,v; cin>>u>>v; add(u,v); } int res=0; for(i=0;i<k;i++){ int x; cin>>x; res^=sg(x); } if(res) cout<<"win"<<endl; else cout<<"lose"<<endl; }