首页 > 其他分享 >2023-05 多校联合训练 HZNU站

2023-05 多校联合训练 HZNU站

时间:2023-05-27 21:56:08浏览次数:43  
标签:sz 传送 const 05 int HZNU 原石 多校 锚点

我想要原石

然而,由于提瓦特大陆实在是太大了,游戏中设置了许多传送锚点。众所周知,每个传送锚点附近都有若干个原石(其实并没有),曾经有一位丰富经验的旅行者开辟了 \(n−1\) 条路和 \(n\) 个由路连通的传送锚点。为了便于后续的旅行者知道地图上原石的分布情况,他决定给旅行者一些提示,但是他没有直接将每个传送锚点附近的原石标注,而是标注了他所走过的路径的权值来考验后续的旅行者。对于一条路径连接的两个点 \(u,v\) 其权值为:点 \(u\) 的原石数量异或点 \(v\) 的原石数量。

现在你来到了这片提瓦特大陆,但是你现在只有一次传送机会——即你可以选择一个传送锚点并到达,并且你将知道这个点的原石数量,请聪明的你回答这 \(n\) 个传送锚点附近原石数量的异或和。

你需要回答 \(q\) 次询问,每次询问告诉你传送的点及该点所有的原石数量,请你根据已有信息推断出这 \(n\) 个传送锚点附近原石数量的异或和。

image-20230527214930119

题解:换根\(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;
}

标签:sz,传送,const,05,int,HZNU,原石,多校,锚点
From: https://www.cnblogs.com/Zeoy-kkk/p/17437440.html

相关文章

  • 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两
    2023-05-27:给你一个只包含小写英文字母的字符串s。每一次操作,你可以选择s中两个相邻的字符,并将它们交换。请你返回将s变成回文串的最少操作次数。注意,输入数据会确保s一定能变成一个回文串。输入:s="letelt"。输出:2。答案2023-05-27:大体过程如下:1.定义结......
  • 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两
    2023-05-27:给你一个只包含小写英文字母的字符串s。每一次操作,你可以选择s中两个相邻的字符,并将它们交换。请你返回将s变成回文串的最少操作次数。注意,输入数据会确保s一定能变成一个回文串。输入:s="letelt"。输出:2。答案2023-05-27:大体过程如下:1.定义结构体Index......
  • 230526 // 小数论复习
    裁决已至!称量,你的罪恶!以此身,肃正万象!人总是越活越抽象的,所以怎么还不考期末,我要考期末!A.Minhttp://222.180.160.110:1024/contest/3641/problem/1给出\(n\)个数\(A_{1\simn}\),现求一组整数序列\(X_{1\simn}\)使得\(S=A_1\timesX_1+A_2\timesX_2+\cdots......
  • C语言课程设计[2023-05-27]
    C语言课程设计[2023-05-27]C语言课程设计综合性设计实验说明设计要求:(1)功能完备,实现用户需求(2)用户界面友好易用(3)必须调试通过,能够正常运行(4)驼峰命名、合理注释、模块化程序功能实现等规范化编程(5)保证源程序可读性。对系统常量等数据要求规范处理,对于常用......
  • ASP.NET MVC WebAPI Put和Delete请求出现405(Method not allowed)错误
    解决办法:在站点根目录下的web.config设置如下(主要参考添加项):<system.webServer></system.webServer>(End)转自:https://www.bbsmax.com/A/qVdepEM85P/......
  • Hugging News #0526: Hugging Cast 发布第一期、邀请来认领自己的论文啦!
    每一周,我们的同事都会向社区的成员们发布一些关于HuggingFace相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「HuggingNews」,本期HuggingNews有哪些有趣的消息,快来看看吧!重磅更新HuggingCast播客#1发布Hugg......
  • 构建之法阅读笔记05
    《现代软件工程构建之法》第五章主要讲述了团队和流程在软件开发中的重要性。在我过去的软件开发工作中,我通常会专注于完成指定任务,很少会考虑整个流程和团队的协作。在这种情况下,往往会出现缺乏沟通和协调,导致项目延误、返工和代码质量低下的问题。通过本章的学习,我意识到建立高......
  • C/C++飞机订票管理系统[2023-05-26]
    C/C++飞机订票管理系统[2023-05-26]题目5飞机订票管理系统设计1问题描述航空客运订票的业务包括:查询航班、客票预订和办理退票等。试设计一个航空客运订票系统,已使上述业务可以借助计算机完成。2.功能要求(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、星期几飞......
  • 2023-05-26:golang关于垃圾回收和析构函数的选择题,多数人会选错。
    2023-05-26:golang关于垃圾回收和析构的选择题,代码如下:packagemainimport( "fmt" "runtime" "time")typeListNodestruct{ Valint Next*ListNode}funcmain0(){ a:=&ListNode{Val:1} b:=&ListNode{Val:2} runtime.SetFi......
  • 23-05-26 刷题-【中缀表达式求值的模板】
    basiccalculator系列题目:(可以作为模板题,记住)224.基本计算器-力扣(LeetCode)[hard]想法:中缀表达式求值。数据结构中栈的应用中缀转后缀。后缀能去掉括号。a+(b+c)*d==》abc+d*+后缀表达式求值:abc+d*+要考虑表达式的优先级,怎么处理括号。括号的优先级,不知......