POJ 3710 Christmas Game(树删边博弈)
题目链接: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(树删边博弈)相关推荐
- POJ 3710 Christmas Game(Tarjan+博弈SG函数)
[题目链接] http://acm.hust.edu.cn/vjudge/problem/toListProblem.action#OJId=POJ&probNum=3710&titl ...
- poj 3710——Christmas Game
题意: 给定多个无向有环图,两个人在树上博弈,问博弈结果. 思路: 如果没有环,则是一个标准的树上博弈,那么满足 1. 叶子节点的sg为0 2. 中间节点的sg为所有儿子节点的sg+1的异或和 存在环 ...
- poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★
poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...
- POJ 2352 Stars (线段树)
POJ 2352 Stars (线段树) 手动博客搬家:本文发表于20170819 22:11:49, 原地址https://blog.csdn.net/suncongbo/article/detai ...
- POJ 1741 Tree(树的点分治)
题目链接:http://poj.org/problem?id=1741 题意:给出一棵树,定义dis(u,v)为两个节点之间的距离.dis(u,v)<=K时成(u,v)是合法的.问有多少个合法的 ...
- poj 2352 Stars(线段树)
题目:http://poj.org/problem?id=2352 大意:一些星星有自己的优先级,优先级是x坐标和y坐标小于等于该星星坐标的星星个数 思路:由于这个题的y值是从小到大排列,所以对x建立 ...
- poj 2513(欧拉路径+字典树映射)
题目链接:http://poj.org/problem?id=2513 思路:题目还是很简单的,就是判断是否存在欧拉路径,我们给每个单词的头和尾映射序号,统计度数.对于给定的无向图,当且仅当图连通并且 ...
- POJ 3237 Tree (树链剖分)
Tree Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 2825 Accepted: 769 Description ...
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...
最新文章
- 安卓问题总结一(The connection to adb is down)
- Solid Converter PDF
- 百度输入法发布AI版本10.0,重磅推出“AI助聊”功能
- Android之登录界面设计
- [Python]ConfigParser解析配置文件
- 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
- python爬虫select用法_Python爬虫利器二之Beautiful Soup的用法
- washer和shell有什么区别_disk or washer method?
- linux系统交换空间,Linux中如何使用和管理交换空间
- [渝粤教育] 中国地质大学 大学英语(3) 复习题
- Android武林大会(转)
- webView加载白屏
- PHP cdata 处理
- IP地址,子网掩码和网关
- 游戏引擎与游戏开发入门介绍
- 自然语言处理(一)——文法(形式语言)基本概念
- Android 翻牌动画 实现
- 部门经理的职责是什么
- Python:利用cv2模块对图片进行灰度转换
- Susy 2 教程 — 入门篇