【CF1230E】Kamil and Making a Stream【GCD性质】【暴力vector】

传送门

题意:给一棵带点权的有根树,求所有满足uuuvvv的祖先的路径(u,v)(u,v)(u,v)的路径上所有点权的gcdgcdgcd的和模1e9+71e9+71e9+7

N≤100000N \leq 100000N100000

看到连续gcdgcdgcd多半是根据单调性维护链表之类的

对于每个点,记录所有祖先到它的路径gcdgcdgcd

由于最多只有O(logV)O(logV)O(logV)种取值并且是单调变倍数的,所以每一段只用维护开始位置和gcdgcdgcd

到子节点时相当于父节点的所有数与子节点的权值取gcdgcdgcd再加上自己

那么之前的一段仍是一段,并且有些段会合并

由于是logloglog级别的,所以直接开NNNvectorvectorvector,用父节点的暴力更新

复杂度O(nlog⁡2V)O(n\log ^2V)O(nlog2V)

略精神污染

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
#include <utility>
#define MAXN 100005
#define MAXM 200005
using namespace std;
const int MOD=1e9+7;
typedef long long ll;
typedef pair<int,ll> pi;
ll gcd(ll a,ll b){return b? gcd(b,a%b):a;}
int ans=0;
struct edge{int u,v;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v)
{e[++cnt]=(edge){u,v};nxt[cnt]=head[u];head[u]=cnt;
}
vector<pi> lis[MAXN];
int dep[MAXN],fa[MAXN];
ll x[MAXN];
void dfs(int u)
{
//	int b=ans;if (fa[u]) lis[u].push_back(make_pair(lis[fa[u]][0].first,gcd(x[u],lis[fa[u]][0].second)));for (int i=1;i<lis[fa[u]].size();i++){ll t=gcd(x[u],lis[fa[u]][i].second);if (t==lis[u].back().second) continue;ans=(ans+lis[u].back().second*(dep[lis[fa[u]][i].first]-dep[lis[u].back().first])%MOD)%MOD;lis[u].push_back(make_pair(lis[fa[u]][i].first,t));}if (lis[u].empty()) lis[u].push_back(make_pair(u,x[u])),ans=(ans+x[u])%MOD;elseif (lis[u].back().second!=x[u]) ans=(ans+lis[u].back().second*(dep[u]-dep[lis[u].back().first])%MOD)%MOD,lis[u].push_back(make_pair(u,x[u])),ans=(ans+x[u])%MOD;else ans=(ans+x[u]*(dep[u]-dep[lis[u].back().first]+1)%MOD)%MOD;
//	printf("%d:\n",u);
//	for (int i=0;i<lis[u].size();i++) printf("%d %lld\n",lis[u][i].first,lis[u][i].second);
//	printf("contribution:%d\n",ans-b);for (int i=head[u];i;i=nxt[i])if (!dep[e[i].v]){dep[e[i].v]=dep[u]+1;fa[e[i].v]=u;dfs(e[i].v);}
}
int main()
{int n;scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%I64d",&x[i]);for (int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);addnode(u,v);addnode(v,u);}dep[1]=1;dfs(1);cout<<ans;return 0;
}

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

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

相关文章

P3391 【模板】文艺平衡树 fhq-treap 模板

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 这是学splaysplaysplay的时候的一个模板题&#xff0c;之前学过fhq−treapfhq-treapfhq−treap&#xff0c;但是没怎么用他做过题&#xff0c;今天一做还发现不少问题&#xff0c;真是眼高…

123. 买卖股票的最3佳时机 III

思路&#xff1a;动态规划&#xff0c; dp1是当前第一次买入的最大值 dp2是当前第一次卖出的最大值 dp3是当前第二次买入的最大值 dp4是当前第二次卖出的最大值 转移看代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int dp1-…

Matrix Decompressing UVA - 11082 最大流 + 输出方案

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给出前iii行的元素和A[i]A[i]A[i]&#xff0c;前jjj列的元素B[j]B[j]B[j]&#xff0c;让你构造一个矩阵使得其满足前iii行的元素和是A[i]A[i]A[i]&#xff0c;前jjj列的元素和是B[j]B[j]B[j]。 r,c≤20r,c\l…

微软正式开源WSL 2的内核源码

微软在今年5月举办的 Build 2019 上宣布了第二代 Windows 的 Linux 子系统 —— WSL 2。与第一代相比&#xff0c;WSL 2 重新设计了架构&#xff0c;使用真正的 Linux 内核&#xff0c;支持在 Windows 上运行 ELF64 Linux 二进制文件。按照计划&#xff0c;WSL 2 的初始版本已于…

【NOI2016】优秀的拆分【后缀数组】【ST表】【关键点】【调和级数复杂度】【差分】

传送门 题意&#xff1a;如果一个字符串可以拆分为AABB的形式&#xff0c;其中A和B是任意非空字符串&#xff0c;则我们这种拆分是优秀的。求给定串的所有子串的拆分方案数之和。 N≤30000N \leq30000N≤30000 本来是个神仙题 但明明一个O(nlogn)O(nlogn)O(nlogn)的题为啥只…

剑指 Offer 43. 1~n 整数中 1 出现的次数(数位dp)

思路&#xff1a;就是数位dp&#xff0c;dp[idx][sum][limit]代表&#xff0c;到idx位&#xff0c;前面有sum个0&#xff0c;有没有limit限制&#xff1b; class Solution { public:int dp[20][50][2];int len; int pos[20];int countDigitOne(int n) {for(int i0;i<15;i)f…

Windows新终端中玩转ASCII和Emoji游戏的正确姿势

前一段时间&#xff0c;我搬运了几个Windows Terminal中玩游戏的视频.Windows Terminal - 动图GIF作背景图Windows Terminal - 母牛说HiWindows Terminal - 字符水族箱今天我来给大家展示一下具体的玩法~Emoji版双人碰碰球目前有个现成的 .NET core 项目可以直接用&#xff0c;…

剑指 Offer 38. 字符串的排列(有重复元素的排列)

思路&#xff1a;dfs 暴搜 class Solution { public:vector<string> permutation(string s) {vector<string> a;function<bool(char,int,int)> check[&](char x,int st,int idx){if(st>idx) return false;for(int ist;i<idx;i) if(s[i]x) return …

Pool construction UVA - 1515 最小割模型

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个n∗mn*mn∗m的矩阵&#xff0c;包含字符#和.&#xff0c;将#变成.的代价是ddd&#xff0c;将.变成#的代价是fff&#xff0c;让后将#和.隔开的代价是bbb&#xff0c;现在让你用最小的代价将#和.隔开&…

【洛谷P4707】重返现世【扩展Min-Max容斥】【dp】

传送门 题意&#xff1a;NNN种物品&#xff0c;每次第iii种产生概率为piM\frac{p_i}{M}Mpi​​,∑piM\sum p_iM∑pi​M。求生成KKK种不同物品的期望时间 模998244353998244353998244353 N≤1000,M≤10000,N−K≤10N \leq1000,M \leq 10000,N-K\leq10N≤1000,M≤10000,N−K≤10…

nowcoder Forsaken的数列 fhq-treap

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 很明显的数据结构了&#xff0c;splaysplaysplay当然能写&#xff0c;但是fhq−treapfhq-treapfhq−treap更加简洁易懂。 考虑第一个操作&#xff0c;无非就是分裂出[1,pos−1][1,pos-1][1…

HTTP协议支持的方法

方法说明支持的HTTP协议版本GET获取资源1.0,1.1POST传输实体主体1.0,1.1PUT传输文件1.0,1.1DELETE删除文件1.0,1.1OPTIONS询问支持的方法1.1HEAD获取报文首部1.0,1.1TRACE追踪路径1.1CONNECT要求用隧道协议连接代理1.1LINK建立和资源之间的联系1.0UNLINE断开连接关系1.0在这里例…

我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅

作者&#xff1a;Lamond Lu大家好&#xff0c;我是陆楠&#xff0c;来自北京盛安德科技发展有限公司青岛分公司&#xff0c;今年非常有幸作为讲师参加了微软Insider Dev Tour烟台站的活动&#xff0c;我主讲了如何使用最新的微软开发工具开发调试NodeJS项目。与微软结缘与大多数…

【bzoj2555】Substring【后缀平衡树入门】

传送门 &#xff08;bzoj上不去我也很无奈啊&#xff09; 题意&#xff1a;维护一个字符串&#xff0c;支持后面加字符串&#xff0c;给定串询问出现次数。强制在线。 数据范围&#xff1a;暴力跑不过 前置知识&#xff1a;重量平衡树 众所周知&#xff0c;平衡树都用了一…

.NET Core 3.0之深入源码理解Kestrel的集成与应用(一)

写在前面ASP.NET Core 的 Web 服务器默认采用Kestrel&#xff0c;这是一个基于libuv(一个跨平台的基于Node.js的异步I/O库)的跨平台、轻量级的Web服务器。在开始之前&#xff0c;先回顾一下.NET Core 3.0默认的main()方法模板中&#xff0c;我们会调用Host.CreateDefaultBuilde…

HTTP状态码的类别

状态码类别类别原因短语1XX信息性状态码接受的请求正在处理2XX成功状态码请求正常处理完毕3XX重定向状态码需要进行附加操作以完成请求4XX客户端错误状态码服务器无法处理请求5XX服务器错误状态码 服务器处理请求出错 HTTP状态码的数量高达60余种&#xff0c;下面为大家介绍比…

P2596 [ZJOI2006]书架 无旋treap 按照排名分裂

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 实现如下操作&#xff1a; 思路&#xff1a; fhq-treap板子辣&#xff0c;不要被他的编号误导了&#xff0c;我们还是需要按照排名来分裂&#xff0c;从上到下标号1−n1-n1−n即可&#xff0c;注意在按照…

【水】几个网络流图论模型的记录

DAG相关 最小路径覆盖 定义&#xff1a;最少不重路径覆盖DAG 初始时每个点是独立的 之后每次加一条边把两个点连到一起 因为只能用一次&#xff0c;所以是个最大匹配 最小路径覆盖N-拆点后最大匹配\text{最小路径覆盖N-拆点后最大匹配}最小路径覆盖N-拆点后最大匹配 最小链…

surging 微服务引擎 2.0 会有多少惊喜?

surging 微服务引擎从2017年6月至今已经有两年的时间&#xff0c;这两年时间有多家公司使用surging 服务引擎&#xff0c;并且有公司搭建了CI/CD&#xff0c;并且使用了k8s 集群&#xff0c;这里我可以说下几家公司的服务搭建情况&#xff0c;公司名不便透露&#xff0c;我们就…

MySQL中存在索引但不能索引的经典场景(笔记)

以%开头的LIKE查询不能使用B-Tree索引 这个是因为B-Tree数的结构决定的&#xff0c;一般推荐使用全文索引来解决类似的全文检索的问题数据类型出现隐式转换的时候也不会使用索引不满足最左前缀原则的情况下也不会使用到索引如果全表扫描比索引快的话&#xff0c;则不使…