hdu1524博弈论sg函数
通过这道题目我们更加可以看清楚sg函数中的图的一些性质。。
#include<iostream> #include<vector> using namespace std; const int MAXN=1002; vector<int>v[MAXN]; int dp[MAXN]; int sg(int p) { if(dp[p]!=-1) { return dp[p]; } int i; bool visited[MAXN]; memset(visited,0,sizeof(visited)); for(i=0;i<=int(v[p].size())-1;i++) { visited[sg(v[p][i])]=1; } i=0; while(visited[i]) { i++; } return dp[p]=i; } int main() { int n; while(cin>>n) { memset(dp,-1,sizeof(dp)); int i=0; for(i=0;i<=n-1;i++) { v[i].clear(); } for(i=0;i<=n-1;i++) { int m; cin>>m; while(m--) { int to; cin>>to; v[i].push_back(to); } } int tn; while(cin>>tn) { if(tn==0) { break; } int sum=0; while(tn--) { int pos; cin>>pos; sum=sum^sg(pos); } if(sum) { cout<<"WIN"<<endl; }else { cout<<"LOSE"<<endl; } } } return 0; }
本博客(http://www.cnblogs.com/cj695/)未标明转载的内容均为本站原创,非商业用途转载时请署名(77695)并注明来源(http://www.cnblogs.com/cj695/)。商业用途请联系作者(77695) QQ:646710030。作者(77695)保留本博客所有内容的一切权利。
独立博客:http://nfeng.cc/
独立博客:http://nfeng.cc/