黄金替罪羊

news/2025/10/4 21:56:19/文章来源:https://www.cnblogs.com/ybtarr/p/19125973

题面

黄金替罪羊实在是太难玩了,所以开拓者弄了个简化版。

黄金替罪羊需要替罪羊和开拓者的配合一起完成任务。

地图可以认为是一棵带权树,每次开拓者会问你一个有序点对 (u,v),表示起点为 u 而终点为 v,在开拓者的指令下会出现替罪羊,替罪羊会出现在 u,对于替罪羊和开拓者的配合程度,开拓者给出定义,是当替罪羊出现的时候开拓者的位置到替罪羊的位置之间经过的所有边的异或和。

开拓者想知道对于所有的发出指令的位置,替罪羊和开拓者的配合程度达到的最大值。开拓者不会走除了 (u,v) 的简单路径之外的点,所以她也只能在 (u,v) 之间的简单路径上发出指令。

思路

首先考虑暴力,我们发现可以暴力处理路径,然后暴力求答案,这样子是计算后求 max。

我们考虑对max进行优化,可以建立01字典树然后优化max的过程

继续优化,我们可以将u到v转化成u到lca和v到lca,所以我们可以维护从根到x的01字典树进行维护,具体来讲,我们记录可以产生贡献的深度最大的点,如果这个深度比lca大,说明可以产生贡献。

继续优化,可以离线下来,动态维护dfs栈

考虑退栈的时候会存在问题,因为max没有逆运算,我们可以标记上一个max的值,回溯时变成上一个max的值即可,这里利用栈的特性

代码

#include <iostream>
#include <vector>using namespace std;const int MaxN = 1e5 + 10, MaxM = 28 * MaxN, MaxK = 18;struct S {int v, w, id;
};struct Node {int nxt[2], mx;Node() {nxt[0] = nxt[1] = mx = -1;}
} trie[MaxM];int f[MaxN][MaxK], rt[MaxN], d[MaxN], dep[MaxN], tot, t, n, q, m, top;
vector<S> g[MaxN], qu[MaxN];void insert(int now, int lst, int x, int w, int p = 0) {rt[now] = ++m, trie[m] = trie[rt[lst]], p = m;for (int i = 30 - 1; i >= 0; i--) {bool c = x & (1 << i);if (trie[p].nxt[c] == -1) trie[p].nxt[c] = ++m;else trie[++m] = trie[trie[p].nxt[c]], trie[p].nxt[c] = m;p = trie[p].nxt[c];trie[p].mx = w;}
}int query(int u, int w, int x, int p = 0, int res = 0) {p = rt[u];for (int i = 30 - 1; i >= 0; i--) {bool c = w & (1 << i);if (~trie[p].nxt[!c] && trie[trie[p].nxt[!c]].mx >= x) p = trie[p].nxt[!c], res ^= (1 << i);else p = trie[p].nxt[c];}return res;
}void DFS(int x, int fa = 0) {f[x][0] = max(1, fa);for (int i = 1; i < MaxK; i++) {f[x][i] = f[f[x][i - 1]][i - 1];}insert(x, fa, d[x], dep[x]);for (auto i : g[x]) {if (i.v == fa) continue;d[i.v] = d[x] ^ i.w, dep[i.v] = dep[x] + 1, DFS(i.v, x); }
}int GO(int x, int k) {for (int i = MaxK - 1; i >= 0; i--) {if (k & (1 << i)) x = f[x][i];}return x;
}int LCA(int x, int y) {if (dep[x] < dep[y]) swap(x, y);x = GO(x, dep[x] - dep[y]);if (x == y) return x;for (int i = MaxK - 1; i >= 0; i--) {if (f[x][i] != f[y][i]) x = f[x][i], y = f[y][i];}return f[x][0];
}int main() {ios::sync_with_stdio(0), cin.tie(0);for (cin >> t; t; t--) {cin >> n >> q, tot = m = 0;for (int i = 1; i <= n; i++) vector<S>().swap(g[i]);for (int i = 1, u, v, w; i < n; i++) {cin >> u >> v >> w;g[u].push_back({v, w, i}), g[v].push_back({u, w, i});}DFS(1);for (int i = 1, u, v, lca; i <= q; i++) {cin >> u >> v, lca = LCA(u, v);cout << max(query(u, d[u], dep[lca]), query(v, d[u], dep[lca])) << '\n';}for (int i = 1; i <= m; i++) trie[i] = Node();}return 0;
}

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

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

相关文章

现在网站如何做优化装修体验馆app

行级触发器&#xff1a;当触发器被触发时&#xff0c;要使用被插入、更新或删除的记录中的列值&#xff0c;有时要使用操作前、后列的值.:NEW 修饰符访问操作完成后列的值:OLD 修饰符访问操作完成前列的值例1: 建立一个触发器, 当职工表 emp 表被删除一条记录时&#xff0c;把被…

有没有帮人做数学题的网站网站建设需求和页面需求怎么提

文章目录出库单业务流程基本流程扩展流程找不到符合条件的仓库&#xff0c;要求部分退款&#xff08;未生成出库单时&#xff09;找不到符合条件的仓库&#xff0c;全部退款&#xff08;未生成出库单时&#xff09;找不到符合条件的仓库&#xff0c;等待库存补足&#xff08;未…

JVM 深入研究 -- 详解class 材料

JVM 深入研究 -- 详解class 材料pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

网站开发的3个阶段工作计划范文

作者 | 飞向星的客机来源 | CSDN博客&#x1f31f; 前言镜像是构建容器的蓝图&#xff0c;Docker 以镜像为模板&#xff0c;构建出容器。容器在镜像的基础上被构建&#xff0c;也在镜像的基础上运行&#xff0c;容器依赖于镜像。本文将对 容器的运行 及相关内容进行详细讲解。容…

Spring Boot 缓存科技详解

Spring Boot 缓存科技详解2025-10-04 21:45 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

制作网站能挣钱怎么制作网站发布

[react] 在React中怎么阻止事件的默认行为&#xff1f; event.preventDefault();阻止浏览器默认行为&#xff0c; 例如标签不跳转 event.stopPropagation();阻止冒泡&#xff1b; 例如上级点击事件不生效 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很…

网站seo房屋经纪人网站端口怎么做

本期内容主要讲解的是关于在CST软件上电源直流压降仿真VRM的一些相关参数设置&#xff0c;小编我在之前文章中有说到过如何利用CST仿真电源信号的直流压降&#xff0c;不过有一些问题我这边再去补充一些。 首先就是VRM芯片的设置了&#xff0c;小编我还是按照之前那样设置&…

淘宝网站建设wordpress下载站批量

单元测试 单元测试在日常项目开发中必不可少&#xff0c;Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持&#xff0c;以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…

【比赛记录】2025CSP-S模拟赛58

A B C D Sum Rank- 25 20 75 120 19/25乱序放题,被 T1 硬控了啊啊啊啊啊 A. 铁轨 原 B. 参加 看到区间操作想不到差分,设差分数组为 \(b\),那么要求即为 \(\forall i\in[1,k],b_i>0,\forall i\in[k+1,n],b_i<…

怎么外贸网站推广欧派家居全屋定制价格多少钱一平

我想知道如何将日期从Hive转移到MySQL&#xff1f;我已经看到了如何将hive数据移动到Amazon DynamoDB而不是像MySQL这样的RDBMS的示例.以下是我在DynamoDB中看到的示例&#xff1a;CREATE EXTERNAL TABLE tbl1 ( name string, location string )STORED BY org.apache.hadoop.hi…

油画风网站网站开发z亿玛酷1负责

文章目录 灰度发布&#xff0c;作用是&#xff1f;测试计划中测试开始条件一般包括哪些内容测试计划中的测试结束条件一般包含哪些内容测试人员是否需要代码能力&#xff0c;应用在哪些方面测试人员参与代码审核&#xff0c;重点关注什么产品上线后发现问题&#xff0c;如何产品…

Kafka06-进阶-尚硅谷 - 实践

Kafka06-进阶-尚硅谷 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

回忆有感

有意思发现自己小学~初一阶段特别喜欢写诗/杂文并分享到QQ动态里面:科技与自然 孤鸿 小时候,对雨总是有种莫名的期盼:雨天,身披着雨衣,脚穿着雨鞋,独自在雨中漫步。踩一脚水洼,看那点点晶莹的水珠如花儿般绽放,…

北京高端网站建设价格网站广东省备案

前面学习完怎么搭建个人博客&#xff0c;后面要做的就是排版优化自己的博客了&#xff0c;今天通过教程学习到了然后更爱美化其中的效果&#xff0c;还通过改写代码来带到基本的效果展示&#xff0c;同时也把最开始学习的计算速成课的笔记输出在上面&#xff0c;这也是一个很好…

框架高效的系统的演进如何塑造人工智能的深层语义分析能力

框架高效的系统的演进如何塑造人工智能的深层语义分析能力pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

『回忆录』高二上第一次月考——压力下的崛起,意料外的突破

初入高二的第一月,第一次进年级 20。明天晚上写,留坑。 最近一直想写回忆录,但是每当有机会坐在电脑面前码字时脑子基本上都是一片空白,再加上可能有家长催促睡觉没有什么灵感。明天晚上是最好的时间了,一回来就写…

AutoCAD 2025安装包下载 CAD免费下载 永久免费激活 附详细安装教程

一、软件下载链接软件名称:CAD2025软件大小:2.69GB安装环境:Win10以及以上下载链接: 夸克网盘:https://pan.quark.cn/s/f6eebbc21976 迅雷网盘::https://pan.xunlei.com/s/VOajN0S5FvdahBySrZeSj-L6A1?pwd=mg7…

深度学习(1)-利用Pytorch2结合U-Net大模型实现图像降噪 - 教程

深度学习(1)-利用Pytorch2结合U-Net大模型实现图像降噪 - 教程2025-10-04 21:23 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

炫酷的html5网站电商小程序源码

参数级联查询是查询控件之间的一种互动方式&#xff0c;比如在某个下拉框选定选项后&#xff0c;另一个下拉框里的选项范围会随之变化。润乾报表提供了多种编辑风格&#xff0c;每种编辑风格都有丰富的属性&#xff0c;以此为基础实现参数级联查询也很简单。下面就通过一个例子…

缓存便捷的技术揭秘

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …