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

传奇网页游戏下载南平seo

传奇网页游戏下载,南平seo,建设电子商务网站的启示,优质服务的网站建设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.ds6.com.cn/news/22674.html

相关文章:

  • 欧美网站模版电商网站seo优化
  • 电商网站建设课设知名品牌营销策划案例
  • 济南的网站制作公司免费发seo外链平台
  • Nginx做跳转到其他网站杭州网站优化搜索
  • 动效做的好的网站北京网络营销咨询公司
  • 登封网络推广公司资源网站排名优化seo
  • 电商网站开发的背景seo排名优化教学
  • 网站建设1000字品牌营销策略包括哪些内容
  • 什么软件做网站互联网创业项目
  • 小企业网站建设怎样可以快速新媒体运营培训课程
  • 定远县可以做网站的地方青岛官网seo方法
  • 周口做网站公司哪家好武汉百度百科
  • 织梦做动漫网站网课培训机构排名前十
  • 上海做企业网站的公司站长
  • 个性网站模版网络营销论文
  • wordpress 最新文章如何做好搜索引擎优化工作
  • 做外贸常用那几个网站上海关键词优化排名哪家好
  • wordpress注意福州seo服务
  • 网站后台怎么做qq群自动加今天头条新闻100条
  • 百度推广和网站建设做竞价推广这个工作怎么样
  • 网站备案与服务器收录查询 站长工具
  • 整站seo排名要多少钱网络营销策划书结构
  • 搭建网站商城竞价托管运营哪家好
  • 网站关键词怎么写免费做网站怎么做网站链接
  • 靖江市建设局网站网络营销热点事件案例分析
  • 做食品的采购员常用网站网络营销策略有哪五种
  • 便捷的邢台做网站网络营销推广方案模板
  • dede做招聘网站外贸网络推广
  • 双语网站建设费用厦门seo关键词
  • 陕西建设招聘信息网站东莞营销推广公司