题目链接:http://poj.org/problem?id=3710

题意:

(1)有若干个个局部联通的图;

(2)Harry 和Sally轮流从图中删边,删去一条边后,不与根节点相连的部分将被移走。Sally为先手。

(3) 图是通过从基础树中加一些边得到的。 所有形成的环保证不共用边,且只与基础树有一个公共点。

(4)谁无路可走谁输。

思路:结论

因此去掉所有的偶环,将所有的奇环变为长度为1的链。那么剩下的问题就是树(在这里就是无向图)的判环问题。对于某一个节点,若其连着一个即偶数的环,那么显然这个换是不用计算的,所以要标记一下。u连着一个奇数环的话要要标记奇数环中与u紧邻的一个要遍历。

const int MAX=105;struct node
{int v,next;
};node edges[MAX*MAX];
int visit[MAX],head[MAX],e;
int dfn[MAX],low[MAX],color[MAX];
int n,m,id,colornum;
int stack[MAX],top;int flag[MAX],SG[MAX];
int g[MAX][MAX];void DFS(int u,int p)
{dfn[u]=low[u]=++id;visit[u]=1;stack[top++]=u;int i,v,temp;for(i=head[u];i!=-1;i=edges[i].next){v=edges[i].v;if(v==p&&g[u][v]>1){flag[u]=1;continue;}if(!dfn[v]){DFS(v,u);low[u]=min(low[u],low[v]);}else if(visit[v]==1&&v!=p) {low[u]=min(low[u],dfn[v]);}}visit[u]=2;if(dfn[u]==low[u]){temp=0;while(stack[--top]!=u) flag[stack[top]]=1,temp++;if(temp&&temp%2==0) flag[stack[top+1]]=0;}
}void Tarjan()
{memset(dfn,0,sizeof(dfn));memset(visit,0,sizeof(visit));id=0;top=0;DFS(1,-1);
}void Add(int u,int v)
{edges[e].v=v;edges[e].next=head[u];head[u]=e++;
}void cal(int u)
{flag[u]=1;for(int i=head[u];i!=-1;i=edges[i].next){int v=edges[i].v;if(!flag[v]) cal(v),SG[u]^=SG[v]+1;}
}int C;int main()
{while(scanf("%d",&C)!=-1){int ans=0,u,v;while(C--){scanf("%d%d",&n,&m);memset(g,0,sizeof(g));memset(SG,0,sizeof(SG));memset(flag,0,sizeof(flag));memset(head,-1,sizeof(head));e=0;while(m--){scanf("%d%d",&u,&v);Add(u,v);Add(v,u);g[u][v]++;g[v][u]++;}Tarjan();cal(1);ans^=SG[1];}puts(ans?"Sally":"Harry");}return 0;
}

  

POJ 3710 Christmas Game(树删边博弈)相关推荐

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

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

  2. poj 3710——Christmas Game

    题意: 给定多个无向有环图,两个人在树上博弈,问博弈结果. 思路: 如果没有环,则是一个标准的树上博弈,那么满足 1. 叶子节点的sg为0 2. 中间节点的sg为所有儿子节点的sg+1的异或和 存在环 ...

  3. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

  4. POJ 2352 Stars (线段树)

    POJ 2352 Stars (线段树) 手动博客搬家:本文发表于20170819 22:11:49, 原地址https://blog.csdn.net/suncongbo/article/detai ...

  5. POJ 1741 Tree(树的点分治)

    题目链接:http://poj.org/problem?id=1741 题意:给出一棵树,定义dis(u,v)为两个节点之间的距离.dis(u,v)<=K时成(u,v)是合法的.问有多少个合法的 ...

  6. poj 2352 Stars(线段树)

    题目:http://poj.org/problem?id=2352 大意:一些星星有自己的优先级,优先级是x坐标和y坐标小于等于该星星坐标的星星个数 思路:由于这个题的y值是从小到大排列,所以对x建立 ...

  7. poj 2513(欧拉路径+字典树映射)

    题目链接:http://poj.org/problem?id=2513 思路:题目还是很简单的,就是判断是否存在欧拉路径,我们给每个单词的头和尾映射序号,统计度数.对于给定的无向图,当且仅当图连通并且 ...

  8. POJ 3237 Tree (树链剖分)

    Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 2825   Accepted: 769 Description ...

  9. poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

    题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...

最新文章

  1. 安卓问题总结一(The connection to adb is down)
  2. Solid Converter PDF
  3. 百度输入法发布AI版本10.0,重磅推出“AI助聊”功能
  4. Android之登录界面设计
  5. [Python]ConfigParser解析配置文件
  6. 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
  7. python爬虫select用法_Python爬虫利器二之Beautiful Soup的用法
  8. washer和shell有什么区别_disk or washer method?
  9. linux系统交换空间,Linux中如何使用和管理交换空间
  10. [渝粤教育] 中国地质大学 大学英语(3) 复习题
  11. Android武林大会(转)
  12. webView加载白屏
  13. PHP cdata 处理
  14. IP地址,子网掩码和网关
  15. 游戏引擎与游戏开发入门介绍
  16. 自然语言处理(一)——文法(形式语言)基本概念
  17. Android 翻牌动画 实现
  18. 部门经理的职责是什么
  19. Python:利用cv2模块对图片进行灰度转换
  20. Susy 2 教程 — 入门篇

热门文章

  1. ORACLE1.13-综合例子应用01
  2. 基础面试题——HTML/CSS
  3. 13计本人工智能第一次作业
  4. 2015.10.13课堂
  5. APUE 学习笔记(三) 文件和目录
  6. mongoengine 学习 笔记
  7. 关于WPF装饰器的笔记
  8. C++项目中编译部分C的代码
  9. IntelliJ Idea学习笔记002---IDEA 全局搜索快捷键CTRL+SHIFT+F,不起作用
  10. C#.NET学习笔记2---C#.第一个C#程序