2023-05 多校联合训练 HZNU站
我想要原石
然而,由于提瓦特大陆实在是太大了,游戏中设置了许多传送锚点。众所周知,每个传送锚点附近都有若干个原石(其实并没有),曾经有一位丰富经验的旅行者开辟了 \(n−1\) 条路和 \(n\) 个由路连通的传送锚点。为了便于后续的旅行者知道地图上原石的分布情况,他决定给旅行者一些提示,但是他没有直接将每个传送锚点附近的原石标注,而是标注了他所走过的路径的权值来考验后续的旅行者。对于一条路径连接的两个点 \(u,v\) 其权值为:点 \(u\) 的原石数量异或点 \(v\) 的原石数量。
现在你来到了这片提瓦特大陆,但是你现在只有一次传送机会——即你可以选择一个传送锚点并到达,并且你将知道这个点的原石数量,请聪明的你回答这 \(n\) 个传送锚点附近原石数量的异或和。
你需要回答 \(q\) 次询问,每次询问告诉你传送的点及该点所有的原石数量,请你根据已有信息推断出这 \(n\) 个传送锚点附近原石数量的异或和。
题解:换根\(DP\)
- 容易发现,当我们知道\(u\)的值后,那么\(v\)的值就是\(u\)的值异或上\(u\)到\(v\)路径上所有边权
- 那么容易发现,如果一条边对答案的贡献为:下边的节点的子树大小
- 所以我们可以先以任意一个点为根,\(dfs\)求出所有点的子树大小,并树形\(dp\)求出根节点的答案值
- 然后我们在通过\(dfs\)换根\(dp\)自上而下求出所有点的答案
- 那么在询问的时候,如果\(n\)为偶数,答案还要异或上\(x\),否则直接输出,\(O(1)\)
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10, M = 4e5 + 10;
int n, q;
vector<pii> g[N];
int ans[N];
int sz[N];
int res;
void dfs(int u, int par)
{
sz[u] = 1;
for (auto [v, w] : g[u])
{
if (v == par)
continue;
dfs(v, u);
sz[u] += sz[v];
if (sz[v] % 2 == 1)
res ^= w;
}
}
void DFS(int u, int par)
{
for (auto [v, w] : g[u])
{
if (v == par)
continue;
if ((sz[u] - sz[v] + n - sz[u]) % 2 == 1 && sz[v] % 2 == 0)
ans[v] = ans[u] ^ w;
else if ((sz[u] - sz[v] + n - sz[u]) % 2 == 0 && sz[v] % 2 == 1)
ans[v] = ans[u] ^ w;
DFS(v, u);
}
}
void solve()
{
cin >> n;
for (int i = 1; i < n; ++i)
{
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
dfs(1, 0);
for (int i = 1; i <= n; ++i)
ans[i] = res;
DFS(1, 0);
cin >> q;
while (q--)
{
int u, x;
cin >> u >> x;
if (n % 2)
cout << (ans[u] ^ x) << endl;
else
cout << ans[u] << endl;
}
}
signed main(void)
{
Zeoy;
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
return 0;
}
2023-05 多校联合训练 HZNU站的更多相关文章
- 2017多校联合训练2—HDU6054--Is Derek lying?(思维题)
Is Derek lying? Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- NFLSOJ 1072 - 【2021 六校联合训练 NOIP #1】异或(FWT+插值)
题面传送门 一道非常不错的 FWT+插值的题 %%%%%%%%%%%% 还是那句话,反正非六校的看不到题对吧((( 方便起见在下文中设 \(n=2^d\). 首先很明显的一点是这题涉及两个维度:异或和 ...
- NFLSOJ 1060 - 【2021 六校联合训练 NOI #40】白玉楼今天的饭(子集 ln)
由于 NFLSOJ 题面上啥也没有就把题意贴这儿了( 没事儿,反正是上赛季的题,你们非六校学生看了就看了,况且看了你们也没地方交就是了 题意: 给你一张 \(n\) 个点 \(m\) 条边的图 \(G ...
- 2016多校联合训练4 F - Substring 后缀数组
Description ?? is practicing his program skill, and now he is given a string, he has to calculate th ...
- 2014 多校联合训练赛6 Fighting the Landlords
本场比赛的三个水题之一,题意是两个玩家每人都持有一手牌,问第一个玩家是否有一种出牌方法使得在第一回和对方无牌可出.直接模拟即可,注意一次出完的情况,一开始没主意,wa了一发. #include< ...
- 2016多校联合训练contest4 1012Bubble Sort
Bubble Sort Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- hdu 4649 Professor Tian 多校联合训练的题
这题起初没读懂题意,悲剧啊,然后看了题解写完就AC了 题意是给一个N,然后给N+1个整数 接着给N个操作符(只有三种操作 即 或 ,与 ,和异或 | & ^ )这样依次把操作符插入整 ...
- HDU OJ 5317 RGCDQ( 2015多校联合训练第3场) 暴力打表+小技巧
题目连接:Click here 题意:在一个[L,R]内找到最大的gcd(f[i],f[j])其中L<=i<j<=R,f[x]表示i分解质因数后因子的种类数.eg:f[10]=2(1 ...
- HDU OJ 5326 Work( 2015多校联合训练第3场) 并查集
题目连接:戳ME #include <iostream> #include <cstdio> #include <cstring> using namespace ...
- HDU 4643 GSM 暑期多校联合训练第五场 1001
点击打开链接 我就不说官方题解有多坑了 V图那么高端的玩意儿 被精度坑粗翔了 AC前 AC后 简直不敢相信 只能怪自己没注意题目For the distance d1 and d2, if fabs( ...
随机推荐
- c程序设计语言 by K&R(二)指针与数组
指针与数组 1. c语言只有值传递,没有引用传递 可通过指针交换 #include <stdio.h> #include <stdlib.h> void swap(int* a ...
- 物体检测序列之一:NMS
IoU (Intersection over Union),交并比,是衡量物体检测模型在特定数据集上检测效果好坏的一个常用的标准,通常情况下,想要通过IoU来衡量物体检测模型好坏需要具备以下几点: 1 ...
- BOM – 操作 Query
前言 ASP.NET Core 写过一篇关于操作 query 的 ASP.NET Core – 操作 Uri 和 Query. 前端偶尔也会需要做出 query. URLSearchParams 之前 ...
- SpringMVC —— 请求参数
请求映射路径 请求方式 get请求传参 post请求传参 POST请求中文参数乱码问题 请求参数(五种类型数据参数) ...
- @RequestBody注意事项
使用@RequestBody注解时,是用于接收Content-Type为application/json类型的请求,数据类型是JSON:{"aaa":"111" ...
- MySQL存储引擎:InnoDB与MyISAM
InnoDB和MyISAM是MySQL数据库中两种常用的存储引擎,它们在数据存储结构.事务支持.锁的支持.外键支持.性能等方面存在显著的差异.下面将详细介绍这两种存储引擎的特点和优势. 什么是存储引擎 ...
- SuperMap iDesktopX创建HBase数据源并导入数据
需提前部署HBase集群,HBase环境搭建请查看文章https://www.cnblogs.com/zhangyongli2011/p/12034628.html 本文基于10.1.1 win版本s ...
- 15. 序列化模块json和pickle、os模块
1. 序列化模块 1.1 序列化与反序列化 (1)序列化 将原本的python数据类型字典.列表.元组 转换成json格式字符串的过程就叫序列化 (2)反序列化 将json格式字符串转换成python ...
- 墨天轮国产数据库沙龙 | 胡彦军:华为GaussDB迁移工具解密
在共同推进国产化生态发展的进程下,墨天轮正式推出"墨天轮国产数据库沙龙"系列直播活动,将定期邀请各国产数据库产品专家.掌门人,共同探讨如何达成技术"自主可控"的 ...
- ArkTS 和仓颉的特性对比与案例
ArkTS和仓颉是两种不同的编程语言,它们各自具有独特的特性和设计目的. ArkTS特性 ArkTS是一种基于TypeScript的编程语言,专门为鸿蒙应用开发而设计.它保留了TypeScript的大 ...
