题目链接

题目大意

给你一颗树,Alice在a点,Bob在b点,Alice最多走da步,Bob最多走db步,两人轮流走路。要你判断经过无数次追赶后,Alice是否可以追上Bob,两人进行的都是最优策略

题目思路

感觉也不特别像一个博弈,但是也不知道该划分到哪里了

这个题目没想象的那么难,首先如果a和b的距离小于da,那么肯定Alice胜,如果2da>=len,len代表树的直径,那么也是Alice胜。 前两个都是显然的。 还有一种如果2*da>=db,这个代表不存在A只差一步追上B的时候,B可以反向再跑一段很长的距离,使得A一步追不上B。那么也是Alice胜

代码

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-10;
int n,a,b,da,db,dis[maxn];
int head[maxn],cnt;
struct node{
int to,next;
}e[maxn<<1];
void add(int u,int v){
e[++cnt]={v,head[u]};
head[u]=cnt;
}
void dfs(int son,int fa){
int cur=0;
for(int i=head[son];i;i=e[i].next){
if(e[i].to==fa) continue;
dis[e[i].to]=dis[son]+1;
dfs(e[i].to,son);
}
}
void init(){
cnt=0;
for(int i=1;i<=n;i++){
head[i]=dis[i]=0;
}
}
signed main(){
int _; scanf("%d", &_);
while(_--){
scanf("%d%d%d%d%d",&n,&a,&b,&da,&db);
init();
for(int i=1,u,v;i<=n-1;i++){
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
}
dfs(a,-1);
bool flag=0;
if(da>=dis[b]){//第一次直接抓住Bob
flag=1;
}
int ma=0,v;
for(int i=1;i<=n;i++){//寻找最远的端点
if(dis[i]>ma){
ma=dis[i];
v=i;
}
}
for(int i=1;i<=n;i++){
dis[i]=0;
}
dfs(v,-1);
int len=0;
for(int i=1;i<=n;i++){
len=max(len,dis[i]);
//树的直径
}
if(2*da>=len||2*da>=db){
flag=1;
}
puts(flag?"Alice":"Bob");
}
return 0;
}

最新文章

  1. myeclipse2013以及以后的最新版各种破解(其实就是获取活跃码而已)
  2. iOS之UI--UITabBarController
  3. Windows部署WordPress
  4. 项目解析- JspLibrary - part1
  5. android中string.xml引起的常见编译错误
  6. C#_uploadify_mvc_version
  7. Redis 命令 - Sets
  8. 仍需&quot;敬请期待&quot;的微信沃卡
  9. c++ Constructor FAQ 继续
  10. hdu 2296 aC自动机+dp(得到价值最大的字符串)
  11. docker pull 镜像报错
  12. 根据ip地址获得国家和城市(C#)
  13. 初识Vulkan【转】
  14. tensorflow object detection
  15. vmware磁盘空间扩展
  16. webpack学习三——output
  17. jquery select change下拉框选项变化判断选中值
  18. [ 原创 ] Java基础8--什么叫做重载
  19. JAVAWEB之文件的上传下载
  20. freemaker优缺点

热门文章

  1. Java学习的第二十一天
  2. 容器探针(liveness and readiness probe)
  3. 阅读源码,通过LinkedList回顾基础
  4. GXOI2018 滚粗记
  5. SQL SERVER级联查询及数据结构《存储过程-递归树形查询》
  6. Markdown tricks
  7. XJOI NOIP501/511训练22 ttt学字符串
  8. keras中的early stopping
  9. HTML+JavaScript实现一个简单抽奖功能
  10. C++ 基础 4:继承和派生