NOIP2023模拟13联测34 abstract

题目大意

有一棵有 n n n个点的树,每个点有一个点权 a i a_i ai f ( i , j ) f(i,j) f(i,j) g ( i , j ) g(i,j) g(i,j)分别表示 i i i j j j的路径上的权值与和权值或,求

∑ i = 1 n ∑ j = i n f ( i , j ) g ( i , j ) \sum\limits_{i=1}^n\sum\limits_{j=i}^nf(i,j)^{g(i,j)} i=1nj=inf(i,j)g(i,j)

输出答案模 111121 111121 111121后的值。

为了方便计算,定义 0 0 = 0 0^0=0 00=0

n ≤ 1 0 5 , a i ≤ 1 0 9 n\leq 10^5,a_i\leq 10^9 n105,ai109,给定的树的叶子(度为 1 1 1的点)不超过 100 100 100个。


题解

不难发现,对于树上从 i i i j j j的链,设 k k k为链上的一个点,则本质不同的 f ( i , k ) f(i,k) f(i,k)不超过 log ⁡ A \log A logA个,其中 A A A a i a_i ai的值域。 g ( i , k ) g(i,k) g(i,k)同理。

f ( i , j ) , g ( i , j ) f(i,j),g(i,j) f(i,j),g(i,j)为一个数对,于是对于树上从 i i i j j j的链,设 k k k为链上的一个点,则本质不同的数对有 O ( log ⁡ A ) O(\log A) O(logA)个。

记叶子个数为 k k k,我们对每个点,用 O ( k log ⁡ A ) O(k\log A) O(klogA)维护这个点到每个子树节点的数对(到每个叶子节点的路径上有最多 O ( log ⁡ A ) O(\log A) O(logA)个本质不同的数对),总时间复杂度为 O ( n k log ⁡ A ) O(nk\log A) O(nklogA)

对于挂在一个点上的链的贡献,我们可以将其看作两个叶子节点在上方相交,最多会有 O ( k 2 ) O(k^2) O(k2)次合并,每次合并都是 O ( log ⁡ 3 A ) O(\log^3 A) O(log3A)的(要枚举这条链的两边,总共有 O ( log ⁡ 2 A ) O(\log^2 A) O(log2A)次,还要用快速幂来求对答案的贡献,是 O ( log ⁡ A ) O(\log A) O(logA)的),所以这部分的时间复杂度为 O ( k 2 log ⁡ 3 A ) O(k^2\log^3A) O(k2log3A)

我们考虑如何省下快速幂的 log ⁡ A \log A logA

可以用光速幂优化,用 O ( p p ) O(p\sqrt p) O(pp )来预处理(其中 p p p为模数,即 111121 111121 111121,是一个质数),那么就可以 O ( 1 ) O(1) O(1) f ( i , j ) g ( i , j ) f(i,j)^{g(i,j)} f(i,j)g(i,j)

总时间复杂度为 O ( n k log ⁡ A + k 2 log ⁡ 2 A + p p ) O(nk\log A+k^2\log^2A+p\sqrt p) O(nklogA+k2log2A+pp )

code

#include<bits/stdc++.h>
using namespace std;
const int N=100000,siz=350;
const long long mod=111121;
int n,vl[N+5];
long long ans=0,pw[mod+5][siz+5];
vector<int>g[N+5];
map<pair<int,int>,int>mp[N+5];
void init(){for(int i=1;i<mod;i++){pw[i][0]=1;for(int j=1;j<=siz;j++) pw[i][j]=pw[i][j-1]*i%mod;}
}
long long mi(long long x,long long y){x%=mod;y%=mod-1;return pw[pw[x][siz]][y/siz]*pw[x][y%siz]%mod;
}
void dfs(int u,int fa){mp[u][{vl[u],vl[u]}]=1;ans=(ans+mi(vl[u],vl[u]))%mod;for(int v:g[u]){if(v==fa) continue;dfs(v,u);for(auto a:mp[u]){for(auto b:mp[v]){ans=(ans+1ll*a.second*b.second%mod*mi(a.first.first&b.first.first,a.first.second|b.first.second)%mod)%mod;}}for(auto b:mp[v]){mp[u][{vl[u]&b.first.first,vl[u]|b.first.second}]+=b.second;}}
}
int main()
{
//	freopen("abstract.in","r",stdin);
//	freopen("abstract.out","w",stdout);init();scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&vl[i]);}for(int i=1,x,y;i<n;i++){scanf("%d%d",&x,&y);g[x].push_back(y);g[y].push_back(x);}dfs(1,0);printf("%lld",ans);return 0;
}

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

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

相关文章

flutter开发实战-TweenSequence实现动画序列

flutter开发实战-TweenSequence实现动画序列 一、TweenSequence TweenSequence是允许创建一个Animation由一系列补间动画来确定值&#xff0c;每个TweenSequenceItem都有定义在动画的持续时间的权重确定动画间隔。 TweenSequence 动画组类TweenSequenceItem 用来定义每一个动…

深度学习读取txt训练数据绘制参数曲线图的方法

有一些深度学习模型是并不像yolo系列那样最终输出相应的参数图&#xff0c;有很多训练形成了一个训练log文件&#xff0c;于是需要读取log文件中的内容并绘制成曲线图。 如下实例&#xff0c;有一个log文件的部分截图&#xff0c;需要将其读取出来并绘制曲线图 废话不多说&…

前端之Bootstrap框架

目录 【一】Bootstrap介绍 【二】Bootstrap引入 【1】CDN加速链接 【2】注意 【三】布局容器 【四】栅格系统 【五】栅格参数 【六】列偏移 【七】排版 标题 内联文本元素 对齐 改变大小写 引用 列表 【八】表格 基本实例 条纹状表格 带边框的表格 鼠标悬停…

汽车工业生产线数字孪生可视化管理平台,赋予工厂车间数字化智慧化管理

在工业4.0 的时代背景下&#xff0c;随着企业数字化进程的推进&#xff0c;数字孪生可视化技术逐渐在汽车行业得到广泛应用&#xff0c;数字孪生智慧工厂的建设也成为了汽车行业数字化转型的趋势之一。汽车制造业属于典型的离散制造行业&#xff0c;汽车生产包含冲压、焊接、涂…

19.13 Boost Asio 发送TCP流数据

Boost框架中默认就提供了针对TCP流传输的支持&#xff0c;该功能可以用来进行基于文本协议的通信&#xff0c;也可以用来实现自定义的协议。一般tcp::iostream会阻塞当前线程&#xff0c;直到IO操作完成。 首先来看服务端代码&#xff0c;如下所示在代码中首先通过GetFileSize…

C++的Odyssey之旅——STL

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a;我们已经将基本语法了解的差不多了&#xff0c;现在我们就该进入C中最重要也是最富有特点的一部分——STL。在学习C语言中我们想要使用顺序表、链表等一些数据结构进行做题时都需要进行这…

Go invalid memory address or nil pointer dereference错误 空指针问题

Go 指针声明后赋值&#xff0c;出现 panic: runtime error: invalid memory address or nil pointer dereference&#xff0c;这种是内存地址错误。 首先我们要了解指针&#xff0c;指针地址在 Go 中 * 代表取指针地址中存的值&#xff0c;& 代表取一个值的地址对于指针&am…

WordPress主题 JustNews主题6.0.1(亲测首页不空白)

介绍 资源入口 需要用WordPress5.X版本 JustNews介绍&#xff1a;一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题&#xff0c;自v3.0版开始支持自主研发的前端用户中心&#xff0c;不仅支持注册、登录、账户设置、个人中心等常用页面的添加&#xff0c;还可以上传…

【原创】java+jsp+servlet简单图书管理系统设计与实现

摘要&#xff1a; 图书管理系统是一个专门针对图书馆管理而设计的系统&#xff0c;它可以帮助图书管理员有效的对图书进行管理&#xff0c;在图书管理系统的设计中&#xff0c;首先要考虑的是系统的需求分析&#xff0c;该系统的设计与实现涉及多个方面&#xff0c;包括数据库…

【赠书第2期】嵌入式虚拟化技术与应用

文章目录 前言 1 背景概述 2 专家推荐 3 本书适合谁&#xff1f; 4 内容简介 5 书籍目录 6 权威作者团队 7 粉丝福利 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展&#xff0c;虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式…

哪些人更容易受到网络攻击?

当下&#xff0c;企业的安全已从传统的外部网络安全威胁防御&#xff0c;逐渐延伸到内部威胁防御。很多时候IT基础设施被攻陷不是外部造成&#xff0c;而是内部使然&#xff0c;这些内部威胁要复杂得多且难以管理。那么&#xff0c;哪些员工最脆弱、最有可能给企业组织带来网络…

Linux 入门

Linux 入门 1&#xff1a;linux 用户 root 用户 &#xff1a;也叫超级用户&#xff0c;UID0&#xff0c;其权限最高。系统用户&#xff1a;也叫虚拟用户&#xff0c;UID 1-999普通用户: UID1000-60000, 可以登录系统,操作自己目录下的文件. 1.1:用户操作命令 切换用户: su …

ts面试题总结

文章目录 前言ts和js的区别&#xff1f;什么是Typescript的方法重载&#xff1f;Typescript中never 和 void 的区别&#xff1f;typescript 中的 is 关键字有什么用&#xff1f;TypeScript支持的访问修饰符有哪些&#xff1f;如何定义一个数组&#xff0c;它的元素可能是字符串…

【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!

文章目录 前言XML映射文件方式推荐使用主键删除注解方式工具类前言 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 XML映射文件方式 Mapper: int delete(int id);Mapper.xml:

U-Mail信创邮件系统解决方案

近年来&#xff0c;在国家政策的大力引导和自身数字化转型需求驱动下&#xff0c;国产化成为国内数字化发展道路上的关键词&#xff0c;企业不断加强自主创新能力&#xff0c;进行信创建设&#xff0c;实现软硬件系统国产化替代&#xff0c;已成为大势所趋。邮件系统作为企业管…

YOLO目标检测数据集大全【含voc(xml)、coco(json)和yolo(txt)三种格式标签+划分脚本+训练教程】(持续更新建议收藏)

一、作者介绍&#xff1a;资深图像算法工程师&#xff0c;YOLO算法专业玩家&#xff1b;擅长目标检测、语义分割、OCR等。 二、数据集介绍&#xff1a; 真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;分享的绝大部分数据集已应用于各种实际落地项目。所有数据…

MarkdownPad2, CSDN及有道云笔记对数学公式的支持

MarkdownPad2, CSDN及有道云笔记对数学公式的支持 MarkdownPad2的安装 下载并安装MrakdownPad2软件&#xff0c;下载地址安装awesomium_v1.6.6_sdk_win&#xff0c; 下载地址安装支持公式编辑的插件&#xff0c;注意&#xff0c;在MarkdownPad2的 Tools > Options > Ad…

Linux提权方法总结

1、内核漏洞提权 利用内核漏洞提取一般三个环节&#xff1a;首先对目标系统进行信息收集&#xff0c;获取系统内核信息及版本信息 第二步&#xff0c;根据内核版本获取对应的漏洞以及exp 第三步&#xff0c;使用exp对目标进行攻击&#xff0c;完成提权 注&#xff1a;此处可…

景联文科技提供高质量人像采集服务,助力3D虚拟人提升逼真度

人像采集是一种通过特定设备或技术&#xff0c;对人的相貌、身材等特征信息进行收集和处理的过程&#xff0c;可应用于3D虚拟人领域。通过采集大量的人像数据&#xff0c;可以训练和优化人像识别算法&#xff0c;提高其准确性。 人像采集对于提高3D虚拟人的逼真度、个性化定制以…

css锚点跳转导致被顶部元素挡住内容

https://blog.csdn.net/xcxwd/article/details/125991703 <style> html {scroll-padding-top: 60px; /* 控制a标签锚点距离顶部距离 */scroll-behavior: smooth; /* 平滑滚动 */ } </style>