当前位置: 首页 > news >正文

徐州公司网站制作网站建站在线制作

徐州公司网站制作,网站建站在线制作,重庆有哪些做网站公司,上海市住房建设部官方网站1008 - H.HEX-A-GONE Trails 题目大意 有两个玩家和一棵树,初始状态玩家一和玩家二分别在两个点 x , y x,\space y x, y,每次操作可以走一个与当前点有连边并且双方都没走到过的点,问最后是谁赢 解题思路 因为不能走走过的点&#xff0c…

1008 - H.HEX-A-GONE Trails

题目大意

有两个玩家和一棵树,初始状态玩家一和玩家二分别在两个点 x , y x,\space y x, y,每次操作可以走一个与当前点有连边并且双方都没走到过的点,问最后是谁赢

解题思路

因为不能走走过的点,因此每个人走的路径一定是一条链

很明显当玩家一不选择往与玩家二所在的点的路径走,相当于把 x → y x\to y xy 的链让给了玩家二

因此如果想要这么走就应该保证对方此时能走的链没有比你要走的长

那么可以开个数组存储 x → y x\to y xy 路径上每个点只经过非路径上的点所能走的最长的链长,可以用树形dp解决

这样操作之后就将问题转化到了数组中解决

双方分别用set维护在当前点所能到达的最远的距离

如果当前玩家离开 x → y x\to y xy 的路径能到的最远的距离比对方set内的最大值大则必胜

如没有必胜策略则继续沿路径走并在双方set中删除不可达的方案

如果双方到见面了还没必胜则比较两者接下来能到的最远距离

具体细节参考代码,哥们觉得太抽象了不好将

code

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
struct lol {int x, y;} e[N << 1];
int t, n, a, b, ans, top[N], vis[N], dep[2][N], f[2][N], p[N], fl;
multiset <int> s[2];
void ein(int x, int y) {e[++ ans].x = top[x];e[ans].y = y;top[x] = ans;
}
void dfs(int x, int fa, int op) {vis[x] ^= 1; f[op][x] = fa; dep[op][x] = dep[op][fa] + 1;if ((x == a || x == b) && fa != 0) return;for (int i = top[x]; i; i = e[i].x) {int y = e[i].y;if (y == fa) continue;dfs(y, x, op);}
}
void dfs1(int x, int fa, int rt) {p[rt] = max(p[rt], max(dep[0][x] - dep[0][rt], dep[1][x] - dep[1][rt]) + 1);for (int i = top[x]; i; i = e[i].x) {int y = e[i].y;if (vis[y] == 2 || y == fa) continue;dfs1(y, x, rt);}
}
int main() {scanf("%d", &t);while (t --) {scanf("%d%d%d", &n, &a, &b); ans = fl = 0;s[0].clear(); s[1].clear();for (int i = 1; i <= n; ++ i)top[i] = p[i] = vis[i] = dep[0][i] = dep[1][i] = 0;for (int i = 1, u, v; i < n; ++ i)scanf("%d%d", &u, &v), ein(u, v), ein(v, u);dfs(a, 0, 0);dfs(b, 0, 1);for (int x = b; x; x = f[0][x]) vis[x] = 2;for (int x = b; x; x = f[0][x]) {dfs1(x, 0, x);if (x != b) s[0].insert(p[x] + dep[0][x] - 1);if (x != a) s[1].insert(p[x] + dep[1][x] - 1);}int x1 = a, x2 = b, i;for (i = 0; x1 != f[0][x2]; ++ i)if ((i & 1) == 0) {if (p[x1] > *prev(s[1].end()) - i / 2) {fl = 1; break;}auto it = s[0].find(p[x1] + i / 2); s[0].erase(it);x1 = f[1][x1];it = s[1].find(p[x1] + dep[1][x1] - 1); s[1].erase(it);} else {if (p[x2] > *prev(s[0].end()) - (i + 1) / 2) {fl = 1; break;}auto it = s[1].find(p[x2] + i / 2); s[1].erase(it);x2 = f[0][x2];it = s[0].find(p[x2] + dep[0][x2] - 1); s[0].erase(it);}if (fl) printf("%d\n", (i & 1) ^ 1);else if ((i & 1) == 1) printf("%d\n", p[x2] > p[x1] ? 0 : 1);else printf("%d\n", p[x1] > p[x2] ? 1 : 0);}return 0;
}
http://www.tj-hxxt.cn/news/61970.html

相关文章:

  • hishop官网谷歌优化怎么做
  • 一线城市做网站工资有多少钱网络推广专员所需知识
  • 做网站在手机端预览乱码了做网站多少钱
  • 聊城网站建设推广免费的网络营销方式
  • 宠物网站建设方案书软件开发网
  • 艺术字体在线生成器毛笔字seo诊断工具有哪些
  • 做门户网站需要多少钱一般网络推广应该怎么做
  • 有哪些做的比较精美的网站广州百度推广优化
  • 装修公司网站 源码成都正规搜索引擎优化
  • 建好的网站在哪里新闻发稿平台有哪些?
  • 初学网站开发需要书籍seo工作室
  • 外接硬盘做创建立网站网络推广方式
  • 祥云建站平台2023年8月新冠又来了
  • java可以做网站开发吗谷歌广告代运营
  • 哪里做网站优化100个免费推广b站
  • 西安模板建站网站广州网站建设公司
  • 优秀的电商设计网站旅游最新资讯 新闻
  • 增加网站流量网络销售怎么样
  • 枣庄做网站公司微博搜索引擎优化
  • 日照企业网站建设广告主资源哪里找
  • 做网站什么是三网合一石家庄关键词快速排名
  • python入门教程完整版seo需要什么技术
  • 西安做网站建设2021热门网络营销案例
  • 做服饰网站网站后端开发
  • php 网站开发文档怎么写东莞seo建站排名
  • 购物网站开发的意义国内新闻今日头条
  • 营销型网站建设方面的书百度地图排名怎么优化
  • 网站注册怎么做飞猪关键词排名优化
  • 用drupal做的网站社交网络推广方法
  • 商城模板网站模板免费下载关键词排名怎么做好