树的删边游戏。。

由于题目的特殊性,我们只需计算环的边数值。若为偶环,则直接把环的根节点置0。若为奇环,则留下一条边与根结点相连,并那它们的SG置0;

注意的是,两个点也可构成环,因为允许重边。所以,我们只需求点双连通分量,并判断分量中边的数量即可。然后DFS求树的SG值。

 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; const int N=;
const int M=;
int n,m;
struct {
int v,next;
}edge[M];
struct {
int u,v;
}edge_stack[M],tmp;
int dfn[N],low[N],index;
int edge_top,tot;
bool vis[N],vis_e[M];
int head[N],sg[N]; void addedge(int u,int v){
vis_e[tot]=false;
edge[tot].v=v;
edge[tot].next=head[u];
head[u]=tot++;
} void tarjan(int u){
int i,j,k,v,e;
dfn[u]=low[u]=++index;
for(e=head[u];e!=-;e=edge[e].next){
v=edge[e].v;
if(dfn[v]==-){
vis_e[e]=vis_e[e^]=true;
edge_stack[++edge_top].u=u;
edge_stack[edge_top].v=v;
tarjan(v);
low[u]=min(low[u],low[v]);
if(dfn[u]<=low[v]){
int cnt=;
do{
tmp.u=edge_stack[edge_top].u;
tmp.v=edge_stack[edge_top].v;
edge_top--;
cnt++;
vis[tmp.u]=vis[tmp.v]=true;
// printf("edge=%d %d ",tmp.u,tmp.v);
}while(!(tmp.u==u&&tmp.v==v));
// printf("\n");
if((cnt&)){
vis[tmp.u]=vis[tmp.v]=false;
}
else vis[tmp.u]=false;
}
}
else{
if(!vis_e[e]){
low[u]=min(low[u],dfn[v]);
if(dfn[u]>dfn[v]){
edge_stack[++edge_top].u=u;
edge_stack[edge_top].v=v;
}
}
}
}
} int dfs(int u){
int e,v;
vis[u]=true;
int ans=sg[u];
for(e=head[u];e!=-;e=edge[e].next){
int v=edge[e].v;
if(!vis[v]){
ans^=(dfs(v)+);
}
}
return ans;
} int main(){
int k,u,v;
while(scanf("%d",&k)!=EOF){
int ans=;
while(k--){
edge_top=-;
scanf("%d%d",&n,&m);
tot=index=;
for(int i=;i<=n;i++){
vis[i]=false; sg[i]=;
head[i]=dfn[i]=low[i]=-;
}
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
tarjan();
ans^=dfs();
}
if(ans) printf("Sally\n");
else printf("Harry\n");
}
return ;
}

POJ 3710的更多相关文章

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

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

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

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

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

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

  4. poj 3710 Christmas Game 博弈论

    思路:首先用Tarjan算法找出树中的环,环为奇数变为边,为偶数变为点. 之后用博弈论的知识:某点的SG值等于子节点+1后的异或和. 代码如下: #include<iostream> #i ...

  5. POJ 3710 Christmas Game

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

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

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

  7. POJ 3710:Matrix Power Series

    Description 给出矩阵 \(n*n\) 的 矩阵\(A\) , 求 \(A^1+A^2+A^3...+A^k\) Solution 首先我们设 \(S_n=\sum_{i=1}^{n}A^i ...

  8. POJ 3710 Christmas Game [博弈]

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

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

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

随机推荐

  1. 笔记《javascript高级程序设计》 第12章 DOM2和DOM3

    DOM2 级核心:在 1 级基础上构建,为节点添加更多方法和属性 DOM2 级视图:为文档定义了基于样式信息的不同视图 DOM2 级事件:说明了如何使用事件和DOM文档交互 DOM2 级样式:如何以编 ...

  2. Web Api跨域登录问题

    最近项目第一次尝试使用web api,照搬了一般mvc的Forms登录方式,在和前端对接的时候出现一个问题: 前端使用ajax调用登录接口完成登录后,再调用别的接口,被判断为未登录. 如果直接在浏览器 ...

  3. js动态追加的元素如何触发事件

    一般通过js或者jQuery动态添加的元素标签,通过该元素标签.class.id触发事件,是无效的.如下所示: <body> <input type="text" ...

  4. python--6、logging模块

    logging 可用的日志级别: debug 10 info 20 warning 30 error 40 critical 50 logging默认参数: 默认日志级别是warning. 默认情况日 ...

  5. 【C++】cin、cout的效率比scanf和printf低的解决方法

    玩竞赛的同学应该发现了C++中直接调用cout.cin的效率要比printf和scanf的效率要低. 要解决这个问题,只需要在前面加上一句 std::ios::sync_with_stdio(fals ...

  6. 【Oracle】删除手工创建的数据库

    众所周知,DBCA创建的数据库可以通过DBCA命令删除,但是手工创建的数据库却不能用此方式删除,下面给出删除方式: SQL> startup mount exclusive SQL> al ...

  7. Hbase 简单记录

    进入hbase 客户端命令行: hbase shell 根据rowkey获取单条数据: get 'HXXT_ns:app_test_hbase', 'rowkey值'   范围查询,并指定数据量: s ...

  8. Inception搭建

    Inception安装Inception是集审核.执行.回滚于一体的一个自动化运维系统,它是根据MySQL代码修改过来的,用它可以很明确的,详细的,准确的审核MySQL的SQL语句,它的工作模式和My ...

  9. Embedded之Stack之二

    1 Function Programming languages make functions easy to maintain and write by giving each function i ...

  10. dubbo之负载均衡

    在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用. Random LoadBalance 随机,按权重设置随机概率. 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按 ...