HDU 1524 A Chess Game (有向无环图SG博弈)
2012-08-08 10:37
330 查看
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents
by---cxlove
这是一个针对有向无环图的博弈。
题目:有N个位置,其中存在拓扑关系,移动时必须遵守。最后移动者胜,问是否有必胜策略
http://acm.hdu.edu.cn/showproblem.php?pid=1524
拓扑关系,说明是一个有向无环图。那么对于某个点的SG函数,便是他的后继结点中没有出现的最小的。(MEX操作),完全就是名字悬乎一点
和求普通的SG函数一样。
by---cxlove
这是一个针对有向无环图的博弈。
题目:有N个位置,其中存在拓扑关系,移动时必须遵守。最后移动者胜,问是否有必胜策略
http://acm.hdu.edu.cn/showproblem.php?pid=1524
拓扑关系,说明是一个有向无环图。那么对于某个点的SG函数,便是他的后继结点中没有出现的最小的。(MEX操作),完全就是名字悬乎一点
和求普通的SG函数一样。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> #define N 10005 #define LL long long #define inf 1<<29 #define eps 1e-7 using namespace std; vector<int>v[1005]; int n,sg[1005]; int get_sg(int n){ if(sg !=-1) return sg ; if(v .size()==0) return 0; int vis[1005]; memset(vis,0,sizeof(vis)); for(int i=0;i<v .size();i++){ sg[v [i]]=get_sg(v [i]); vis[sg[v [i]]]=1; } for(int i=0;;i++) if(vis[i]==0) return i; } int main(){ while(scanf("%d",&n)!=EOF){ memset(sg,-1,sizeof(sg)); for(int i=0;i<n;i++){ v[i].clear(); int k,u; scanf("%d",&k); while(k--){ scanf("%d",&u); v[i].push_back(u); } } int q,k,u; while(scanf("%d",&k)&&k){ int ret=0; while(k--){ scanf("%d",&u); if(sg[u]==-1) sg[u]=get_sg(u); ret^=sg[u]; } if(ret==0) puts("LOSE"); else puts("WIN"); } } return 0; }
相关文章推荐
- hdu 1524 A Chess Game
- hdu 1524 A Chess Game
- HDU 1524 A Chess Game(SG函数)
- hdu 1524 A Chess Game (SG)
- POJ 2425 && HDU 1524 A Chess Game(博弈论)
- (step 8.2.13)hdu 1524(A Chess Game)
- HDU 1524 A Chess Game 【SG函数】
- hdu1524 A Chess Game
- hdu 1524 A Chess Game 博弈论
- (step 8.2.13)hdu 1524(A Chess Game)
- hdu 1524 A Chess Game
- HDU 1524 - A Chess Game(SG)
- hdu 1524 A Chess Game
- HDU 1524 A Chess Game [SG函数]【博弈】
- HDU 1524 A Chess Game(SG博弈)
- HDU 1524 A Chess Game (SG函数模板题)
- HDU_1524 A Chess Game (sg函数)
- SG 函数 hdu1524 & poj 2425 hdu1524 A Chess Game
- 杭电1524 A Chess Game(博弈--- 图)
- sg函数_____A Chess Game( hdu 2425 )