CF1404BTree Tag/ BZOJ0487. 树上追逐详解

1.题目

传送门:Tree Tag - 洛谷 

2.思路

我们考虑什么情况下Alice可以获胜.

如果dis_{a,b}​ ≤ da,则Alice可以一步就追上Bob.

如果Alice处在一个能覆盖整棵树的点,即2da + 1≥树的直径,那么Bob也无论走到哪里Alice都能追到,Alice获胜.

其它情况下,Alice会一步一步逼近Bob,并一定能把Bob逼近某棵子树.

如果当前Alice占据一个点,使Bob无论怎么走都还在Alice的控制范围内,那么Alice必胜.

此时条件即为2da≥db.

最后一种情况有些同学可能没听懂,我来举个栗子

那么此时如果 是Bob走,并且满足2da≥db的话

如果Bob继续往下走,Alice肯定能继续追(其实Bob只能往下走,不然一步就会被追上),而当Bob走到一个子节点,没办法往下走的时候,那么他就必输

除以上条件外,Bob获胜,因为他可以再Alice靠近他的时候不断反向跳走.

总结一下:

只有三种情况 Alice 赢

  1. dis(a,b)≤da
  2. 2×da≥db 此时只要一步步逼近即可
  3. 树的直径 ≤2×da 此时只要占据直径中点即可

3.代码

#include <bits/stdc++.h>
using namespace std;
int t,n,a,u,v,b,da,db,deep[1000001],deep_2[1000001],zj,zjj,lzj;
vector<int> vec[1000001];
void dfs(int x,int fa,int d)
{deep[x] = d;for(int i = 0;i < vec[x].size();i++)if(vec[x][i] != fa)dfs(vec[x][i],x,d + 1);
}
void qzj()//求树的直径
{dfs(1,0,0);int t = 0;for(int i = 1;i <= n;i++)if(t < deep[i]){t = deep[i];zj = i;}dfs(zj,0,0);t = 0;for(int i = 1;i <= n;i++)if(t < deep[i]){t = deep[i];zjj = i;}lzj = t;
}
int main()
{cin>>t;while(t--){cin>>n>>a>>b>>da>>db;for(int i = 1; i <= n; i++) vec[i].clear();for(int i = 1;i < n;i++){cin>>u>>v;vec[u].push_back(v);vec[v].push_back(u);}if(2 * da >= db){cout<<"Alice\n";continue;}qzj();if(2 * da >= lzj){cout<<"Alice\n";continue;}dfs(a,0,0);if(deep[b] <= da){cout<<"Alice\n";continue;}cout<<"Bob\n";}return 0;
}

4.结语

如果对您有帮助的话,记得点个赞支持一下QwQ疯狂明示 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/252651.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

string容器

#include<iostream> using namespace std; //string的构造函数 void test01() {string s1;//默认构造const char *str"holle word";string s2(str);cout<<"s2"<<s2<<endl;string s3(s2);cout<<"s3"<<s3<…

【Vitis】基于C++函数开发组件的步骤

目录 基本步骤 关键领域 • 硬件接口&#xff1a; 任务级并行度&#xff1a; 存储器架构&#xff1a; 微观级别的最优化&#xff1a; 基本步骤 1. 基于 设计原则 建立算法架构。 2. &#xff08;C 语言仿真&#xff09; 利用 C/C 语言测试激励文件验证 C/C 代码的逻辑。…

六轴机器人奇异点

1 奇异点说明 有着6个自由度的KUKA机器人具有3个不同的奇点位置。即便在给定状态和步骤顺序的情况下,也无法通过逆向变换(将笛卡尔坐标转换成极坐标值)得出唯一数值时,即可认为是一个奇点位置。这种情况下,或者当最小的笛卡尔变化也能导致非常大的轴角度变化时,即为奇点位置…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之MenuItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItem组件 用来展示菜单Menu中具体的item菜单项。 子组件 无 接口 Menu…

C语言贪吃蛇详解

个人简介&#xff1a;双非大二学生 个人博客&#xff1a;Monodye 今日鸡汤&#xff1a;人生就像一盒巧克力&#xff0c;你永远不知道下一块是什么味的 C语言基础刷题&#xff1a;牛客网在线编程_语法篇_基础语法 (nowcoder.com) 一.贪吃蛇游戏背景 贪吃蛇是久负盛名的游戏&…

如何决定K8S Pod的剔除优先级

在Kubernetes&#xff08;k8s&#xff09;中&#xff0c;当节点资源面临压力时&#xff0c;如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后&#xff0c;引入了基于Pod优先级的调度策略&#xff0c;即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…

6-2、T型加减速计算简化【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍简化T型加减速计算过程&#xff0c;使其适用于单片机数据处理。简化内容包括浮点数转整型数计算、加减速对称处理、预处理计算 一、浮点数转整型数计算 根据上一节内容已知 常用的晶振大小…

3dmatch-toolbox详细安装教程-Ubuntu14.04

3dmatch-toolbox详细安装教程-Ubuntu14.04 前言docker搭建Ubuntu14.04安装第三方库安装cuda/cundnn安装OpenCV安装Matlab 安装以及运行3dmatch-toolbox1.安装测试3dmatch-toolbox(对齐两个点云) 总结 前言 paper:3DMatch: Learning Local Geometric Descriptors from RGB-D Re…

基于单片机的智能寻光小车设计

摘 要&#xff1a;随着物联网技术的飞速发展和逐渐成熟&#xff0c;以单片机为主的智能小车在巡查、仓储、探险及国防等领域得到广泛应用。本文设计了一种基于单片机的智能寻光小车&#xff0c;该小车以STC89C52RC 芯片为设计核心&#xff0c;结合光敏传感器和超声波传感器等多…

初识C语言·编译与链接

1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境&#xff0c;一是翻译环境&#xff0c;二是运行环境&#xff0c;计算机能识别的是二进制的指令&#xff0c;人写完代码后通过翻译环境&#xff0c;使代码变成计算机能读懂的可执行的机器指令&a…

MySQL组复制的介绍

前言 本文介绍关于MySQL组复制的背景信息和基本原理。包括&#xff0c;介绍MySQL传统复制方法的原理和隐患、介绍组复制的原理&#xff0c;单主模式和多主模式等等。通过结合原理图学习这些概念&#xff0c;可以很好的帮助我们理解组复制技术这一MySQL高可用方案&#xff0c;有…

ChatGPT 4.0 升级指南, ChatGPT Plus(GPT 4.0) 有何优势?

1.ChatGPT 是什么&#xff1f; ChatGPT 是由 OpenAI 开发的一种基于人工智能的聊天机器人&#xff0c;它基于强大的语言处理模型 GPT&#xff08;Generative Pre-trained Transformer&#xff09;构建。它能够理解人类语言&#xff0c;可以为我们解决实际的问题。 ChatGPT 4.…

关于网络面试题汇总

什么是TCP/IP五层模型&#xff1f;它们的作用是啥&#xff1f;基于TCP/IP实现的应用&#xff08;层协议&#xff09;有哪些&#xff1f; TCP/IP五层模型&#xff0c;从上向下分别是&#xff1a; 应用层&#xff1a;应用程序本身&#xff0c;应用层的作用是负责应用程序之间的…

python使用fabric库

目录 一&#xff1a;介绍 二&#xff1a;远程命令执行 三&#xff1a;文件上传&#xff0c;下载 四&#xff1a;执行多台服务器命令 一&#xff1a;介绍 Fabric是一个Python库&#xff0c;用于简化SSH连接和自动化任务。它提供了一个简单的API来执行远程命令、上传和下载文…

京东广告算法架构体系建设--大规模稀疏场景高性能训练方案演变

一、前言 京东广告训练框架随着广告算法业务发展的特点也在快速迭代升级&#xff0c;回顾近几年大致经历了两次大版本的方案架构演变。第一阶段&#xff0c;随着2016年Tensorflow训练框架的开源&#xff0c;业界开始基于Tensorflow开源框架训练更复杂的模型。模型对特征规模和…

ctfshow——文件包含

文章目录 web 78——php伪协议第一种方法——php://input第二种方法——data://text/plain第三种方法——远程包含&#xff08;http://协议&#xff09; web 78——str_replace过滤字符php第一种方法——远程包含&#xff08;http://协议&#xff09;第二种方法——data://&…

Visual Studio 2010+C#实现信源和信息熵

1. 设计要求 以图形界面的方式设计一套程序&#xff0c;该程序可以实现以下功能&#xff1a; 从输入框输入单个或多个概率&#xff0c;然后使用者可以通过相关按钮的点击求解相应的对数&#xff0c;自信息以及信息熵程序要能够实现马尔可夫信源转移概率矩阵的输入并且可以计算…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…

C++内存分区模型

C程序在执行时&#xff0c;将内存大方向划为4个区域。分别是代码区、全局区、栈区、堆区。 栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值、局部变量等。 堆区&#xff1a;由程序员分配和释放&#xff0c;若程序员不释放&#xff0c;程序结束时由操作系…