“华为杯”杭州电子科技大学2023新生编程大赛---树

news2024/10/6 18:25:57

题目链接

Problem Description

给定一棵包含 n 个节点的带边权的树,树是一个无环的无向联通图。定义 xordist(u,v) 为节点 u 到 v 的简单路径上所有边权值的异或和。

有 q 次询问,每次给出 `l r x`,求 ∑ri=lxordist(i,x) 的值。

Input

测试点包含多组数据。第一行包含一个整数 T(1≤T≤10),表示数据组数。每组数据的输入格式如下:
第一行包含一个整数 n(1≤n≤105),表示节点的个数。
接下来 n−1 行,每行包含三个整数 u、v 和 w(1≤u,v≤n,0≤w<230),表示 u 和 v 之间存在一条权值为 w 的无向边。保证输入是一棵树。
接下来一行,包含一个整数 q(1≤q≤105),表示询问的次数。
接下来 q 行,每行包含三个整数 l、r 和 x(1≤l≤r≤n,1≤x≤n),分别表示每次询问的信息,其含义已在上文说明。

Output

每组数据包含 q 行,每行一个整数,表示每次询问的答案。

题意:

定义了一个函数  xordist(u,v) 为节点 u 到 v 的简单路径上所有边权值的异或和。

给你多次询问,求有 q 次询问,每次给出 l, r, x,求 \sum_{i=l}^{r} xordist(i,x) 的值。

思路:

首先可以知道,我们任意选一点为根 root 往下递归异或就可以得到 f [ i ](root 到 i 的路径异或值 ),那么  l 到 r 的路劲异或值可以由 f [ l ] ^ f [ r ]得出;

那么如何计算答案呢,就是用 f [ l ]~f [ r ] 分别异或f [ x ] 相加即可,但是1e5级别的询问显然时间复杂度不可以接受,然后我们就行有什么可以快速算出 l ~ r  的贡献呢,这时候就看思维发不发散了,这里可以想到用前缀和;

(当然不是异或前缀和,异或不满足分配律,比如 (2^3+2^3+4^3)!=8^3

所以是另一种 :计算1~n , f [ i ] 2进制的每一位1和0的前缀和,

那么答案就是,对f [ x ] 的每一位的贡献计算,比如f [ x ] 第2位是0,那么根据异或1异或0才有贡献, 贡献就是 pow( 2 , i (第几位) )*( sum1[ r ][ i ]-sum1[ l-1 ][ i ] );

复杂度位1e5*30,显然可以接受

完毕

int n;
int f[N];
vector<PII> g[N];
void dfs(int u, int fa)
{
    for (auto ed : g[u])
    {
        if (ed.xx == fa)
            continue;
        f[ed.xx] = f[u] ^ ed.yy;
        dfs(ed.xx, u);
    }
}
int qpow(int a, int b)
{
    int res = 1;
    while (b)
    {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}
void solve()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        g[i].clear();
        f[i] = 0;
    }
    int root = inf;
    for (int i = 1; i <= n - 1; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        g[a].pb({b, c});
        g[b].pb({a, c});
        root = min({a, b, root});
    }
    dfs(root, -1);
    vector<vector<int>> sum1(n + 2, vector<int>(32));
    vector<vector<int>> sum0(n + 2, vector<int>(32));
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j <= 29; j++)
        {
            int x = (f[i] >> j & 1);
            if (x)
                sum1[i][j]++;
            else
                sum0[i][j]++;
            sum1[i][j] += sum1[i - 1][j];
            sum0[i][j] += sum0[i - 1][j];
        }
    }
    int q;
    cin >> q;
    while (q--)
    {
        int l, r, x;
        cin >> l >> r >> x;
        int ans = 0;
        for (int i = 0; i <= 29; i++)
        {
            int t = (f[x] >> i & 1);
            if (t)
                ans += qpow(2, i) * (sum0[r][i] - sum0[l - 1][i]);
            else
                ans += qpow(2, i) * (sum1[r][i] - sum1[l - 1][i]);
        }
        cout << ans << endl;
    }
}
signed main()
{
    Yshanqian;
    int T;
    T = 1;
    cin >> T;
    for (int cases = 1; cases <= T; ++cases)
    {
        // cout<<"Case #"<<cases<<": ";
        solve();
    }
    return 0;
}

  

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

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

相关文章

IO进程线程Day4

1> 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <myhead.h> //使用三个进程完成两个文件的拷贝工作 //两个子进程分别拷贝文件的上下两部分 //父进程回…

Azure Machine Learning - 人脸识别任务概述与技术实战

Azure AI 人脸服务提供了可检测、识别和分析图像中的人脸的 AI 算法。 人脸识别软件在许多不同情形中都十分重要&#xff0c;例如识别、无接触访问控制和实现隐私的人脸模糊。你可以通过客户端库 SDK&#xff0c;或者直接调用 REST API 使用人脸服务。 目录 一、人脸识别服务场…

AspectJ入门(二)— 应用

AspectJ便于调试、测试和性能调整工作。定义的行为范围从简单的跟踪到分析&#xff0c;再到应用程序内部一致性到测试。AspectJ可以干净地模块化这类功能&#xff0c;从而可以在需要时轻松地启用和禁用这些功能。 1 基础 本节将继续介绍AspectJ到一些基础功能&#xff0c;为后…

【量化金融】《证券投资学》吴晓求(第四版)(更新中)

这里写目录标题 第一篇 基本知识第1章 证券投资工具名词解释简答题 第2章 证券市场名词解释简答题 第二篇 基本分析第三篇 技术分析第四篇 组合管理第五篇 量化分析与交易策略 第一篇 基本知识 第1章 证券投资工具 名词解释 风险&#xff08;risk&#xff09; 未来结果的不…

半年没涨薪了,原来忽略了这个职场技巧

大家好&#xff0c;我是木川 说到职场&#xff0c;大家都想爬得高一些&#xff0c;赚得多一些对吧&#xff1f;这时候&#xff0c;“向上管理”就显得特别重要了。 其实这就是个高级点的说法&#xff0c;意思就是怎么跟老板打好关系&#xff0c;让自己在工作上更顺利。 一、成功…

【KingbaseES】实现MySql函数WEERDAY

CREATE OR REPLACE FUNCTION weekday(date_val date) RETURNS integer AS $$ BEGIN RETURN EXTRACT(ISODOW FROM date_val); END; $$ LANGUAGE plpgsql IMMUTABLE;

从0开始python学习-39.requsts库

目录 HTTP协议 1. 请求 2. 响应 Requests库 1. 安装 2. 请求方式 2.1 requests.请求方式(参数) 2.2 requests.request() 2.3 requests.session().request() 2.4 三种方式之间的关联 3. 请求参数 3.1 params&#xff1a;查询字符串参数 3.2 data&#xff1a;Form表单…

自然语言转SQL,一个微调ChatGPT3.5的实例(下)--模型微调及模型性能

提交训练集进行微调 一旦我们创建了JSONL文件&#xff08;可以在这里或ipfs_here找到一个小样本&#xff09;&#xff0c;下一步是使用以下命令将创建的文件上传到OpenAI&#xff1a; openai.api_key os.getenv("OPENAI_API_KEY") print(openai.File.create(fileo…

Spark内核解析-Spark shuffle6(六)

1、Spark Shuffle过程 1.1MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌、混洗&#xff0c;把一组有一定规则的数据尽量转换成一组无规则的数据&#xff0c;越随机越好。MapReduce中的Shuffle更像是洗牌的逆过程&#xff0c;把一组无规则的数据尽量转换成一组具有一定规则…

mycat 安装和水平分表

1.拉取需要创建docker版的mycat资源 # 下载对应的资源 git clone https://github.com/ruanjiayu/docker.mycat # 进入docker.mycat cd /home/cluster/mycat/docker.mycat # 构建镜像 docker-compose build 2.修改配置 vim config/mycat/schema.xml <?xml version"…

Mac M1 Parallels CentOS7.9 Install Parallels Tools

一、挂载parallels-tools安装包 mkdir /media/cdrom/ mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 写保护&#xff0c;将以只读方式挂载二、GCC升级 yum install -y centos-release-scl yum install -y devtoolset-8-gcc*# 切换当前会话中gcc版本为8 scl enable devtool…

【OJ比赛日历】快周末了,不来一场比赛吗? #01.06-01.12 #10场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2024-01-06&#xff08;周六&#xff09; #4场比赛2024-01-07…

Unity3D入门基础知识汇总

1、参考链接 01.游戏引擎是啥玩意&#xff1f;_哔哩哔哩_bilibili 2、unity概念 它是一套具有完善体系与编辑器的跨平台游戏开发工具&#xff0c;也称之为游戏引擎。游戏引擎是指一些编写好的可重复利用的代码与开发游戏所用的各功能编辑器。 3、unity界面 右上边可以切换布局…

图像评价指标PSNR、SSIM、LPIPS、FID(接上篇,这篇主要讲FID)

关于FID的计算&#xff0c;这里我直接使用startGANv2中的计算FID的方法&#xff0c;比较简单&#xff0c;快速。理论部分我就不讲了&#xff0c;网上一搜一大堆&#xff0c;我写的都是干货&#xff08;主要是怕太长了&#xff0c;没人看&#x1f602;&#xff09; 上一篇是关于…

苹果电脑菜单栏应用管理软件Bartender 4 mac软件特点

Bartender mac是一款可以帮助用户更好地管理和组织菜单栏图标的 macOS 软件。它允许用户隐藏和重新排列菜单栏图标&#xff0c;从而减少混乱和杂乱。 Bartender mac软件特点 菜单栏图标隐藏&#xff1a;Bartender 允许用户隐藏菜单栏图标&#xff0c;只在需要时显示。这样可以…

【React系列】网络框架axios库的使用

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. axios库的基本使用 1.1. 网络请求的选择 目前前端中发送网络请求的方式有很多种&#xff1a; 选择一:传统的Aj…

指令周期流程图相关题目

已知CPU结构如下图所示&#xff0c;其中包括一个累加器AC、一个状态寄存器和其他几个寄存器。各部分之间的连线表示数据通路&#xff0c;箭头表示信息传递方向。试完成以下工作&#xff1a;①写出图中四个寄存器A、B、C、D的名称和作用&#xff1b;②简述完成指令ADD Y的数据通…

一篇文章学会Vim

一篇文章学会Vim 声明&#xff1a;以下内容均为我个人的理解&#xff0c;如果发现错误或者疑问可以联系我共同探讨 简介 Vim是一个高度可定制的终端文本编辑器&#xff0c;它可以很方便的创建和修改任何类型的文本。作为vi的升级版&#xff0c;有许多新的特性(以下列出的特性…

C# 使用Microsoft消息队列(MSMQ)

写在前面 Microsoft Message Queuing (MSMQ) 是在多个不同的应用之间实现相互通信的一种异步传输模式&#xff0c;相互通信的应用可以分布于同一台机器上&#xff0c;也可以分布于相连的网络空间中的任一位置。 使用消息队列可以实现异步通讯&#xff0c;无需关心接收端是否在…

CentOs搭建Kafka集群

Centos7搭建Kafka集群 一、集群规划二、环境准备三、安装kafka集群1、下载kafka安装包2、解压3、配置环境变量4、编辑配置文件①修改broker.id②配置kafka运行日志路径③配置Zookeeper集群地址 5、启动集群6、测试kafka①、创建topic②、查看当前服务器中的所有topic③、生产者…