OK,好的先看一下题意:

B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 
给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1。 在一局游戏开始时,会确定一个节点作为根。接下来从女生开始,双方轮流进行 操作。 
当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即0变成1,1 变成0 )。 
当一方无法操作时(即所有边的边权均为0),另一方就获得了胜利。 
如果在双方均采用最优策略的情况下,女生会获胜,则输出“Girls win!”,否则输 出“Boys win!”。 
为了让游戏更有趣味性,在每局之间可能会有修改边权的操作,而且每局游戏指 定的根节点也可能是不同的。 
具体来说,修改边权和进行游戏的操作一共有m个,具体如下: 
∙∙“0 x”表示询问对于当前的树,如果以x为根节点开始游戏,哪方会获得胜利。 
∙∙“1 x y z ”表示将x和y之间的边的边权修改为z。

—————————————————————————————————————————————————————————————————————————————

 sorry,代码在下面

题意应该比较好懂,一般人应该也知道这是博弈论。

但是我建议大家先模拟一下样例,方便理解。

但是具体怎么想呢?

博弈论一般都要先想什么时候是必胜状态。

同理:

这道题的必胜状态是什么呢?

当根节点所连的边中只有一条边的权值为1的话,那么肯定是 女生赢。

当根节点只连一条边,且边的权值是1,在这条边之后又连了很多条边,随便编的权值。

第一次女生翻转,那么第一条边的权值变成了0. 男生肯定不能翻转第一条边,

如果男生不能翻转,那么女生就赢了,如果男生还可以翻转,这时候第一条边又变成了1.

女生翻转又把第一条边变成了0.所以男生永远不可能翻转第一条边。

所以这种状态一定是女生赢。(根节点连了一条权值为1 的边。)

如果根节点连的边的权值和 为奇数,就是女生赢,反之就是男生赢。

是不是很简单。

然后是超级简单的代码。

提醒大家注意理解sum数组的含义。

 #include <cstdio>
#include <cstring>
using namespace std;
const int maxn=;
struct node{
int from,to,next,value;
}e[maxn<<];
int head[maxn],cnt,sum[maxn];
void add(int x,int y,int z){
e[++cnt].from=x;e[cnt].to=y;e[cnt].value=z;e[cnt].next=head[x];head[x]=cnt;
}
int main(){
//freopen("a.in","r",stdin);
int t;scanf("%d",&t);
while(t--){
memset(e,,sizeof(e));
memset(head,,sizeof(head));
memset(sum,,sizeof(sum));
cnt=;
int n,m;scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
int x,y,z;scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
sum[x]+=z;sum[y]+=z;
}
for(int i=;i<=m;i++){
int u;scanf("%d",&u);
if(u==){
int x;scanf("%d",&x);
int ans=sum[x];
if(ans%==)printf("Girls win!\n");
else printf("Boys win!\n");
}
else {
int x,y,z;scanf("%d%d%d",&x,&y,&z);
for(int k=head[x];k;k=e[k].next){
int v=e[k].to;
if(v==y){
sum[x]-=e[k].value;
sum[x]+=z;
e[k].value=z;
}
}
for(int k=head[y];k;k=e[k].next){
int v=e[k].to;
if(v==x){
sum[y]-=e[k].value;
sum[y]+=z;
e[k].value=z;break;
}
}
}
}
}
return ;
}

最简单的博弈论——HDU - 5963 朋友 (博弈)的更多相关文章

  1. HDU 5963 朋友 (找规律,思维)

    HDU 5963 朋友 题目大意 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点 ...

  2. HDU 5963 朋友 【博弈论】 (2016年中国大学生程序设计竞赛(合肥))

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

  3. HDU 5963 朋友(找规律博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=5963 题意: 思路: 我们可以先只考虑单链,自己试几种案例就可以发现规律,只有与根相连的边为1时,只需要奇数次操 ...

  4. 【博弈】HDU - 5963 朋友

    题目 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双 ...

  5. HDU 5963 朋友(树+博弈)

    #include<vector> #include<cstdio> #include<cstring> #include<algorithm> #def ...

  6. hdu 5963 朋友(2016ccpc 合肥站 C题)

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  7. hdu 5963:朋友

    刚看到这题时感觉是树上博弈,然后我开始用一维的数据找规律.发现在一维的树上,如果把各边的值合在一起当成一个二进制数,那么,ans只与奇偶性有关,于是,我提出了一个比较大胆的假设:若连接在root上的所 ...

  8. hdu 5693 朋友 博弈

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

  9. 【不知道怎么分类】HDU - 5963 朋友

    题目内容 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始 ...

随机推荐

  1. LB服务:硬件如何被软件取代(上)

    [摘要] 大业务上云,难免要用到LB.可是,您是否了解LB的来龙去脉?本文浅谈一下LB,从硬件走到软件,他们经历了什么转变. 大业务上云,难免要用到LB.可是,您是否了解LB的来龙去脉?本文浅谈一下L ...

  2. ASP.NET Core Blazor WebAssembly实现一个简单的TODO List

    基于blazor实现的一个简单的TODO List 最近看到一些大佬都开始关注blazor,我也想学习一下.做了一个小的demo,todolist,仅是一个小示例,参考此vue项目的实现http:// ...

  3. [go设计模式]工厂方法模式

    简单工厂就是生产整个计算器,而工厂方法只生产计算器的一部分: 原有的简单工厂可以生'+' '-' '*' '/' ;但是如果添加新的部件'%',厂房就 需要扩充.修改很可以会影响原来部件的正常生产,这 ...

  4. js实现初始化调用摄像头

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  5. 面试了 6 轮 Google 中国 之后,还是挂了

    去年换工作的时候, 面试了一下 Google (这里说的是 Google 中国哈), 来了个 Google 面试六轮游, 结果是没通过.

  6. CSS布局之Flex布局

    Flex布局,可以简便.完整.响应式地实现各种页面布局. 浏览器支持:得到所有浏览器的支持.(注:Flex布局将成为未来布局的首选方案)   一. Flex布局的概念 Flex是Flexible Bo ...

  7. Springboot拦截器实现IP黑名单

    Springboot拦截器实现IP黑名单 一·业务场景和需要实现的功能 以redis作为IP存储地址实现. 业务场景:针对秒杀活动或者常规电商业务场景等,防止恶意脚本不停的刷接口. 实现功能:写一个拦 ...

  8. 为避免种族歧视,谷歌Chrome将不再使用“黑名单”等词

    GitHub 15.2k Star 的Java工程师成神之路,不来了解一下吗! GitHub 15.2k Star 的Java工程师成神之路,不来了解一下吗! 近日,美国黑人乔治‧佛洛伊德(Georg ...

  9. 【大厂面试08期】谈一谈你对HashMap的理解?

    摘要 HashMap的原理也是大厂面试中经常会涉及的问题,同时也是工作中常用到的Java容器,本文主要通过对以下问题进行分析讲解,来帮助大家理解HashMap的原理. 1.HashMap添加一个键值对 ...

  10. Linux 半连接队列,全连接队列

    socket 中 listen api中参数backlog指定的是 全队列大小 accept api是从全队列中获取, 没有就阻塞了, 直到有新连接进来. listen中指定的值大小,有一个最大上限, ...