思路:首先用Tarjan算法找出树中的环,环为奇数变为边,为偶数变为点。

之后用博弈论的知识:某点的SG值等于子节点+1后的异或和。

代码如下:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
int ans;
vector<int>p[];
bool vis[],inss[];
int low[],dfa[],num[][],ss[],top;
void Tarjan(int u,int pre,int d)
{
low[u]=dfa[u]=d;
ss[top++]=u;
inss[u]=;
for(int i=;i<p[u].size();i++){
int v=p[u][i];
if(v==pre&&num[u][v]>){
if(num[u][v]%==) vis[u]=;
continue;
}
if(!dfa[v]){
Tarjan(v,u,d+);
low[u]=min(low[u],low[v]);
}
else if(v!=pre&&inss[v]){
low[u]=min(low[u],dfa[v]);
}
}
if(low[u]==dfa[u]){
top--;
int cnt=;
while(ss[top]!=u){
vis[ss[top--]]=;
cnt++;
}
if(cnt&) vis[ss[top+]]=;
}
}
int dfs(int d,int pre)
{
int ans=;
for(int i=;i<p[d].size();i++){
if(p[d][i]!=pre&&!vis[p[d][i]])
ans^=(+dfs(p[d][i],d));
}
return ans;
}
int main()
{
int n,m,a,b,t,ans;
while(scanf("%d",&t)!=EOF){
ans=;
while(t--){
memset(vis,,sizeof(vis));
memset(ss,,sizeof(ss));
memset(low,,sizeof(low));
memset(dfa,,sizeof(dfa));
memset(num,,sizeof(num));
memset(inss,,sizeof(inss));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) p[i].clear();
while(m--){
scanf("%d%d",&a,&b);
num[a][b]++;
num[b][a]++;
p[a].push_back(b);
p[b].push_back(a);
}
top=;
Tarjan(,-,);
ans^=dfs(,-);
}
puts(ans?"Sally":"Harry");
}
return ;
}

poj 3710 Christmas Game 博弈论的更多相关文章

  1. POJ.3710.Christmas Game(博弈论 树上删边游戏 Multi-SG)

    题目链接 \(Description\) 给定n棵"树",每棵"树"的节点可能"挂着"一个环,保证没有环相交,且与树只有一个公共点. 两人轮 ...

  2. poj 3710 Christmas Game【博弈论+SG】

    也就是转换到树形删边游戏,详见 https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html #include<iostream> ...

  3. poj 3710 Christmas Game(树上的删边游戏)

    Christmas Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1967   Accepted: 613 Des ...

  4. POJ 3710 Christmas Game#经典图SG博弈

    http://poj.org/problem?id=3710 (说实话对于Tarjan算法在搞图论的时候就没搞太懂,以后得找时间深入了解) (以下有关无向图删边游戏的资料来自论文贾志豪<组合游戏 ...

  5. POJ 3710 Christmas Game

    知识储备: 解决办法(奇偶去环):   (1) 对于长度为奇数的环,去掉其中任意一个边之后,剩下的 两个链长度同奇偶,抑或之后的 SG 值不可能为奇数,所 以它的 SG 值为 1: (2) 对于长度为 ...

  6. POJ 3710 Christmas Game [博弈]

    题意:略. 思路:这是个删边的博弈游戏. 关于删边游戏的预备知识:http://blog.csdn.net/acm_cxlove/article/details/7854532 学习完预备知识后,这一 ...

  7. POJ 3710 无向图简单环树上删边

    结论题,这题关键在于如何转换环,可以用tarjan求出连通分量后再进行标记,也可以DFS直接找到环后把点的SG值变掉就行了 /** @Date : 2017-10-23 19:47:47 * @Fil ...

  8. Solution -「POJ 3710」Christmas Game

    \(\mathcal{Decription}\)   Link.   定义一棵圣诞树: 是仙人掌. 不存在两个同一环上的点,度数均 \(\ge 3\).   给出 \(n\) 棵互不相关的圣诞树,双人 ...

  9. POJ3710 Christmas Game 博弈论 sg函数 树的删边游戏

    http://poj.org/problem?id=3710 叶子节点的 SG 值为0:中间节点的SG值为它的所有子节点的SG值加1后的异或和. 偶环可以视作一个点,奇环视为一条边(连了两个点). 这 ...

随机推荐

  1. hdu 4217 Data Structure?/treap

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4217 可用线段树写,效率要高点. 这道题以前用c语言写的treap水过了.. 现在接触了c++重写一遍 ...

  2. android开发系列之友盟统计集成

    相比大家都遇到这种情况,当我们的app上线之后,我们想要实时的跟踪了解到app里面的bug情况.新增用户情况.用户相关的行为属性情况等.但是如果自己在app里面去开发集成这些功能,一方面开发工作量还挺 ...

  3. android 下滤镜效果的实现

    android 下滤镜效果的实现 滤镜过滤颜色已实现,简单版本可通过下面代码的3个参数实现黑白.红.绿...等7种过滤(RGB的7种组合). 理论上讲可以过滤为任意颜色.调整混合结果的比值就行了. p ...

  4. Golang的Semicolons

    Semicolons The formal grammar uses semicolons ";" as terminators in a number of production ...

  5. mysql取整,小数点处理函数floor(), round()

    mysql数值处理函数floor与round    在mysql中,当处理数值时,会用到数值处理函数,如有一个float型数值2.13,你想只要整数2,那就需要下面的函数floor与round.   ...

  6. Status Bar in iOS7

    This is a very important change in iOS 7: the status bar is no longer a separate bar. It’s now somet ...

  7. 位bit——字节Byte???

    1.换算 每8个位(bit)组成一个字节(byte) 位bit简写为小写字母“b”,字节Byte简写为大写字母“B” 8*b=1*B 1024*B=1*KB 1024*K=1MB 2.举例 一个英文字 ...

  8. 关于使用regsvr32命令注册ActiveX控件失败的解决办法

    昨天小编也遇到这样问题,步骤一切都对,没有错误,但是每次在命令行下输入的时候,都会弹出一个对话框: 最后我发现是存放ActiveX控件的路径中带有中文文件名字所导致,所以导致的错误,我们将所在路径下的 ...

  9. java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...

  10. “我爱淘”冲刺阶段Scrum站立会议5

    完成任务: 由于我们的思路做了些改变,重新设计了界面的布局. 计划任务: 实现数据库的链接,将页面布局完善. 遇到问题: 使用webservice对数据的提取