题意:

给定多个无向有环图,两个人在树上博弈,问博弈结果。

思路:

如果没有环,则是一个标准的树上博弈,那么满足
1. 叶子节点的sg为0
2. 中间节点的sg为所有儿子节点的sg+1的异或和

存在环的话,可以缩点,偶数是0,奇数为1,具体证明看《组合游戏略述——浅谈SG游戏的若干拓展及变形》

#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;const int N=1005;
bool vis[N];
int ve[N],s[N],w[N],top;
int to[N],next[N],head[N],cnt;
void addedge(int u,int v){to[++cnt]=v;next[cnt]=head[u];head[u]=cnt;to[++cnt]=u;next[cnt]=head[v];head[v]=cnt;
}
int dfs(int u){vis[u]=1;int ans=0;s[++top]=u;int tt,v;for (int i=head[u];i;i=next[i]){if(!ve[i]) {ve[i]=1;ve[i^1]=1;v=to[i];if(!vis[v]) tt=dfs(v)+1;else{int q=s[top--];while(q!=v) w[q]=1 , q=s[top--];++top;return 1;}if(w[v]) ans^=(tt%2);else ans^=tt;}}return ans;
}
void init(int n){//for (int i=0;i<=n;i++) g[i].clear();memset(head,0,sizeof(head));memset(next,-1,sizeof(next));memset(vis,0,sizeof(vis));memset(ve,0,sizeof(ve));memset(w,0,sizeof(w));top=0;cnt=1;
}
int main(int argc, char const *argv[])
{int T,n,m;while (~scanf("%d",&T)){int ans=0;while (T--){scanf("%d%d",&n,&m);init(n);for (int i=0;i<m;i++){int u,v;scanf("%d%d",&u,&v);addedge(u,v);}ans^=dfs(1);}if (ans) puts("Sally");else puts("Harry");}return 0;
}

poj 3710——Christmas Game相关推荐

  1. POJ 3710 Christmas Game(树删边博弈)

    题目链接:http://poj.org/problem?id=3710 题意: (1)有若干个个局部联通的图: (2)Harry 和Sally轮流从图中删边,删去一条边后,不与根节点相连的部分将被移走 ...

  2. POJ 3710 Christmas Game(Tarjan+博弈SG函数)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/toListProblem.action#OJId=POJ&probNum=3710&titl ...

  3. (转载)--SG函数和SG定理【详解】

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  4. 组合博弈游戏 - SG函数和SG定理

    转载来自:http://blog.csdn.net/luomingjun12315/article/details/45555495 在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜 ...

  5. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  6. SG函数和SG定理【详解】

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  7. poj 3013 Big Christmas Tree(最短路变形)

    传送门:POJ 3013 Big Christmas Tree 描述: Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K To ...

  8. 【POJ - 3160】Father Christmas flymouse(Tarjan缩点,DAG最长路)

    题干: After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ends s ...

  9. POJ - 3160 Father Christmas flymouse DAG最长路

    又来做这一道缩点的裸题,发现图转化为DAG后明显是一个最长路,那么有没有固定都求法呢,查询资料后发现的确是一种固定的做法. DAG最长路,分为两种固定终点和不固定终点. 令dp[i]表示从i顶点出发能 ...

最新文章

  1. 使用 pipe 在程序正文中捕获和处理信号
  2. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
  3. 好程序员web前端分享使用JavaScript正则表达式如何去掉双引号
  4. ngnix有版本要求吗_联想小新15 2020款值得入手吗?性能怎么样?不可不看的秘密...
  5. android 点击外部接收事件,Android Dialog外部点击事件
  6. centos7搭建apache服务器(亲测可用)
  7. 解决 :sudo:/etc/sudoers 可被任何人写
  8. 教育|我在美国读博士才发现,美国高等教育如此残酷,以前的感觉完全是扯淡...
  9. SSH 默认端口配置
  10. fgo服务器维护补偿什么时候才有,FGO11月02日临时维护公告 补偿奖励一览
  11. 真探第一季/全集True Detective1迅雷下载
  12. 爱立信、意大利电信及高通公司基于5G毫米波创下远程传输速度纪录
  13. Cannot resolve method ‘create‘ in ‘String‘
  14. 第八章:善于利用指针
  15. 计算机应用基础2011,2011统计师计算机应用基础:计算机概述
  16. 开发框架——横版格斗——动作游戏教程
  17. kubernetes cordon原理
  18. python调用迅雷下载引擎_python将下载地址转换成迅雷和qq旋风的下载地址
  19. stm32开发板(特别是mini最小系统板)USB不能识别导致无法下载程序的原因
  20. GEE (Google Earth Engine)最基础代码学习笔记三

热门文章

  1. 不使用JavaScript实现菜单的打开和关闭
  2. 关于换行这个动作,win 和 mac 的实现
  3. C: City----逆向并查集
  4. HDP 2.6 requires libtirpc-devel
  5. C# Timer定时器用法
  6. servlet中url-pattern之/与/*的区别
  7. loadView的使用总结
  8. 《机器学习基石》---感知机算法
  9. Iptables入门教程
  10. linux技巧----查找某个正在执行的脚本