SP10707 Count on a tree II

倾斜摄影实景三维建模全流程:从无人机采集到Web三维展示 实景三维重建是数字孪生与智慧城市建设的关键技术,其核心是通过无人机倾斜摄影获取多视角影像,再经空三解算生成高精度三维模型。然而,从原始数据到浏览器中流畅展示的三维场景,还面临模型破洞、拉花、悬浮物等质量问题,以及数据量大、格式不兼容等发布挑战。模型修复与轻量化处理是决定成果可用性的重要环节,而基于3D Tiles标准的网络发布则让大规模三维场景在Web端高效渲染成为可能。这一技术链路广泛应用于文旅展示、城市规划、应急管理等领域。本文以工程实践为背景,系统梳理从外业采集、内业建模、模型修复到CesiumJS部 阅读详情

Description

给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v),你需要回答u和v这两个节点间有多少种不同的点权。

Input

第一行两个整数N,M。
第二行有N个整数,其中第i个整数表示点i的权值。
后面N-1行每行两个整数(x,y),表示点x到点y有一条边。
最后M行每行两个整数(u,v),表示一组询问。

数据范围是N<=40000 M<=100000 点权在int范围内

Output

M行,表示每个询问的答案。

Sample Input

8 2
105 2 9 3 8 5 7 7
1 2
1 3
1 4
3 5
3 6
3 7
4 8
2 5
3 8

Sample Output

4

4

树上莫队模板。(强制在线的话可以树分块)。只是提一句拉成dfs序之后并不是简单的增加删减,而是走过两次的会被删除,只出现一次的才真的加进去,切记切记。(我权值不离散化套个log=tle)

#include<bits/stdc++.h>
using namespace std;
const int Maxn=100005;
inline int getint(){
	int res=0;char c=getchar();
	while(!isdigit(c))c=getchar();
	while(isdigit(c))res=res*10+c-'0',c=getchar();
	return res;
}
vector<int>G[Maxn];
int n,m,siz,v[Maxn],bl[Maxn];
int cnt,p[Maxn],fir[Maxn],sec[Maxn];
struct Query{
	int l,r,lca,idx;
}q[Maxn];
bool cmp(const Query&A,const Query&B){
	if(bl[A.l]!=bl[B.l])return A.l<B.l;
	return bl[A.l]&1?A.r<B.r:A.r>B.r;
}
struct Tree{
	int dep[Maxn],prt[20][Maxn];
	void dfs(int x,int fa,int Dep){
		p[fir[x]=++cnt]=x;
		prt[0][x]=fa;dep[x]=Dep;
		for(int i=0;i<G[x].size();++i)
			if(G[x][i]!=fa)dfs(G[x][i],x,Dep+1);
		p[sec[x]=++cnt]=x;
	}
	void ST(){
		int maxlog=log2(n);
		for(int j=1;j<=maxlog;++j)
			for(int i=1;i<=n;++i)
				if(prt[j-1][i])prt[j][i]=prt[j-1][prt[j-1][i]];
	}
	int lca(int x,int y){
		if(dep[x]<dep[y])swap(x,y);
		for(int i=log2(dep[x]);i>=0;--i)
			if(dep[x]-(1<<i)>=dep[y])x=prt[i][x];
		if(x==y)return y;
		for(int i=log2(dep[x]);i>=0;--i)
			if(prt[i][x]!=prt[i][y])x=prt[i][x],y=prt[i][y];
		return prt[0][x];
	}
}st;
int ret,ans[Maxn],Count[Maxn];
bool vst[Maxn];
void update(int x){
	vst[x=p[x]]^=1;
	if(vst[x]){
		if(++Count[v[x]]==1)++ret;
	}else {
		if(--Count[v[x]]==0)--ret;
	}
}
int tmp[Maxn];
void discrete(){
	for(int i=1;i<=n;++i)tmp[i]=v[i];
	sort(tmp+1,tmp+n+1);
	int siz=unique(tmp+1,tmp+n+1)-tmp-1;
	for(int i=1;i<=n;++i)
		v[i]=lower_bound(tmp+1,tmp+siz+1,v[i])-tmp;
}
int main(){
	n=getint(),m=getint();
	for(int i=1;i<=n;++i)
		v[i]=getint();
	discrete(); 
	for(int i=1;i<n;++i){
		int x=getint(),y=getint();
		G[x].push_back(y);
		G[y].push_back(x);
	}
	st.dfs(1,0,0);
	st.ST();
	for(int i=1;i<=m;++i){
		int x=getint(),y=getint(),lca=st.lca(x,y);
		if(fir[x]>fir[y])swap(x,y);
		if(lca==x){
			q[i]=(Query){fir[x],fir[y],0,i};
		}
		else {
			q[i]=(Query){sec[x],fir[y],lca,i};
		}
	}
	siz=sqrt(cnt);
	for(int i=1;i<=cnt;++i)
		bl[i]=(i-1)/siz+1;
	sort(q+1,q+m+1,cmp);
	int l=1,r=0;
	for(int i=1;i<=m;++i){
		while(l<q[i].l)update(l++);
		while(l>q[i].l)update(--l);
		while(r>q[i].r)update(r--);
		while(r<q[i].r)update(++r);
		ans[q[i].idx]=ret+(q[i].lca&&!Count[v[q[i].lca]]);
		
	}
	for(int i=1;i<=m;++i)
		cout<<ans[i]<<"\n";
	return 0;
}

 

【Matlab算法】MATLAB实现的语音信号降噪算法(附MATLAB完整代码) 语音信号降噪是语音处理领域中的一个关键问题。在实际应用中,语音信号常常被各种环境噪声污染,这不仅影响了语音的质量,还可能导致后续处理(如语音识别)的性能下降。因此,开发有效的降噪算法对于提高语音通信质量、改善语音识别系统性能等具有重要意义。 本文将介绍并实现两种经典的语音信号降噪算法:谱减法和维纳滤波。这两种方法都是基于频域处理的技术,具有实现简单、计算效率高的特点。通过MATLAB实现这些算法,我们可以直观地比较它们的性能和降噪效果。 阅读详情

相关推荐

单细胞测序流程(五)t-sne聚类分析和寻找marker基因

系列文章目录 单细胞测序流程(一)简介与数据下载 单细胞测序流程(二)数据整理 单细胞测序流程(三)质控和数据过滤——Seurat包分析,小提琴图和基因离差散点图 单细胞测序流程(四)主成分分析——PCA 本期主讲内容——t-sne聚类分析和寻找marker基因 介绍:T-SNE是一种用于探索高维数据的非线性降维算法。它将多维数据映射到适合于人类观察的两个或多个维度。 一、课前准备 之前所使用的数据 R语言的IDE 二、过程 聚类分析的目的是根据细胞的差别所进行细胞分群,两个..

qq_45478665的博客 2万+

SP10707 COT2 - Count on a tree II 树上莫队

https://www.luogu.com.cn/problem/SP10707 欧拉序就是进去的时候标记一次出来的时候标记一次,然后我们把这个序列拿出来,变成一个2*n的新序列,每个点有前后两次访问ll[i]和rr[i],那么一段树上的路径就可以用区间表示 假设询问是u,v的路径,ll[u]<ll[v],如果u是v的祖先,那么直接对应到ll[u]-ll[v],否则对应到rr[u]-ll[v]再加上ll[lca(u,v)],因为u和v的最近公共祖先出现一定在ll[u]左边,第二次出现在rr[v]右

binarycopycode 191

使用 Python 和可视化编程控制树莓派机械臂myCobot

这些模块包括逻辑、循环、数学、文本、列表、颜色、变量、函数以及控制机械臂的函数等等,所以用户可以轻松入门编程,只需单击右上角的运行就可以启动程序,做一些有趣的应用。可以搭配任意摄像头进行图像识别,具有4个 USB 端口,可以通过 Raspberry Pi 的微型 HDMI 端口连接到显示器. 最后,40 个GPIO 接头可以进行更多扩展应用,机械臂每个接口都有清晰的标记,面板上还有一个电源开关和一个直流电源插孔。您现在可以将机器人放在地板或桌子上,并用力拧紧吸盘,以确保机械臂的底座在操作过程中不会移动。

m0_62456998的博客 3965

【洛谷】SP10707

树形结构 #数据结构 #莫队。

Antonio915的博客 751

HighTec安装(官网免费)编译 嘎嘎详细~

安装软件最好有自己的一套安装规则,工程软件除了安装主体外还会有很多其他的东西,比如license或者还会有一些驱动,如果所有都随意安装会导致你需要卸载,或者更新软件时,有的需要将原来软件卸载干净,如果没有清晰的安装路径那真是灾难啊~请确保此目录中只有个人许可证。这样基本的配置就ok了,下面打开hightec软件检验下license是否识别到了,会让你选个工作区,建议自己建一个,要不你以后就找不到了,,,如下图拉到下面,按照要求填写信息,随便写就行,注意主要的MAC地址要填本机的物理地址,然后点击2即可。

weixin_60793044的博客 1万+

PX4 EKF2协方差矩阵‘负定’了怎么办?保姆级排查与数值稳定性修复指南

本文深入解析PX4 EKF2协方差矩阵出现‘负定’问题的原因,并提供全面的排查与修复方案。从理论分析到实践操作,详细介绍了数值稳定性危机的诊断工具、算法加固措施及工程实践中的防御性编程技巧,帮助飞控工程师有效解决滤波算法中的数值稳定性问题。

weixin_28730927的博客 318

SP10707 COT2 - Count on a tree II (树上莫队)

参考博客 对于树上的路径询问问题 O(1)的时间加入或删除一个点的贡献 -> \(O(n\sqrt n)\)的复杂度求出所有询问的答案 对树上的结点进行分块,离线询问后排序,顺序遍历暴力转移路径(转移时加入或删除路径上的点的贡献即可)。 关于转移路径:首先定义路径:设\(T_u\)为\(u\) 到根的路径上边的集合,那么\(u\)到\(v\) 的路径上的边的集合就是\(T_u...

weixin_30677475的博客 121

【东华大学oj】找到最大数(一维数组->中等)

一天,老师布置了一个作业,要求对一串数字各不相同的数字串进行排序,大的在前,小的在后。接着,我从数字串中的第二个数字开始往后找,找到最大的一个,然后与第二个数字交换,这样的话我就能够确定排序后数字串中的第二个数字;明明研究发现,他的这个想法中最重要的一环就是在一串数字中找到最大的那个,然后与第一个数字交换,可是明明毕竟刚刚开始学习程序设计不久,无法写出较复杂的程序,所以明明想让你这位程序设计专家帮他的忙,帮助他把这段核心程序写出来,然后明明只需模仿着写就可以了。时间限制: 1S类别: 一维数组->中等。

的博客 524

Problem - K Russian Dolls on the Christmas Tree - Codeforces (树上启发式合并)

Problem - K Russian Dolls on the Christmas Tree - Codeforces 题意 有一棵 nnn 个节点的树,节点编号为 1−n1-n1−n,111 号节点是根。问以每个节点为根的子树中,有多少个连续区间。 解法 子树?离线?立即推:树上启发式合并! 统计子树每个编号的点出现的次数,同时维护答案; 如果编号为 uuu 的点从无到有,就看编号为 u−1u-1u−1 和 u+1u+1u+1 的点的出现情况,如果都出现了,就说明两个区间合并为一个,区间数减一,如果都

bandiaoz的博客 346

从 Open SQL JOIN 走向 ABAP CDS Association:把查询写成可复用的数据模型

摘要: 本文通过飞行模型示例,对比了ABAP中三种表关联实现方式:Open SQL JOIN、CDS显式JOIN和CDS Association。重点解析了Association的本质是将表关系声明为数据模型语言,使用时通过路径表达式按需展开为JOIN。文章指出路径表达式在不同位置会默认展开为不同JOIN类型(如SELECT列表默认为LEFT OUTER),并演示了如何用[inner]强制指定INNER JOIN。最后结合S/4HANA实际案例,说明Association通过中心化关系定义和路径复用,能有效

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 382

FPGA实现串口升级及MultiBoot(九)BPI FLASH相关实例演示

与SPI相关知识并没有什么太多区别(别杠硬件或者架构上),相关知识点都在上面指出,大家有什么其他需要注意点,欢迎留言讨论。关于“四样错误”就不演示了,没什么太大区别,下一讲我们开始串口升级。PS:为了扩展ICAPE2原语的使用,在原来的基础上增加了几个常用FPGA ID,并在触发启动时候增加了可选电平触发或上升/下降沿触发(例化IP时选择),新版本号V1.1。

OpenFPGA的博客 1444

SP10707 COT2 - Count on a tree II

树上莫队

Hardy_Lee的博客 185

YOLOv11改进策略【独家融合改进】| 模型轻量化二次改进:StarNet + FreqFusion,极限降参,适用专栏内所有轻量化模型

FreqFusion是一种旨在解决密集图像预测任务中特征融合问题。

Limiiiing的博客 2123

洛谷 SP10707 COT2 - Count on a tree II 树上莫队

洛谷 SP10707 COT2 - Count on a tree II 题意 给定一棵 nnn 个结点的树,每个结点有一个颜色。有 mmm 次询问,问两个结点之间路径上不同的颜色个数。 (n≤4⋅104,m≤105n \le 4\cdot 10^4 , m \le 10^5n≤4⋅104,m≤105) 解法 树上莫队 利用欧拉序把树上结构转换成线性结构。也就是对这棵树从根节点开始进行dfs,记录进入的时间戳 st[]st[]st[] 和离开的时间戳 ed[]ed[]ed[] 。 对于树上的两个结点 u,

bandiaoz的博客 207

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SP10707 COT2 - Count on a tree II (树上莫队)

传送门 普通莫队是对一段一维的序列上操作的算法,即使带修莫队也是增加一个时间轴修改的序列也是一维的,如果对于一个树能否操作呢?可以将对树处理成一个欧拉序来实现,欧拉序是在dfs序的基础上在绕回每个点时将这个点填进去的序列。举个例子: dfs序:12345678 欧拉序:1233445526778861 定义:s[i]表示节点i入栈的时间戳,t[i]表示节点i出栈的时间戳。 所以欧拉序的长度是2n的,对树上两点u和v之间的路径有两种情况(假设u的深度比v小): u是v的祖先:那么s[u]到s[v]之间的点(

qq_45288870的博客 285

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SP10707 COT2 - Count on a tree II 【树上莫队】

题目描述 给定一个n个节点的树,每个节点表示一个整数,问u到v的路径上有多少个不同的整数。 输入格式 第一行有两个整数n和m(n=40000,m=100000)。 第二行有n个整数。第i个整数表示第i个节点表示的整数。 在接下来的n-1行中,每行包含两个整数u v,描述一条边(u,v)。 在接下来的m行中,每一行包含两个整数u v,询问u到v的路径上有多少个不同的整数。 #include<b...

slass-mot-odet 357

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SP10707 COT2 - Count on a tree II 莫队

链接 https://vjudge.net/problem/SPOJ-COT2 https://www.luogu.org/problemnew/show/SP10707 思路 dfs欧拉序转化为普通莫队(并不算树上莫队,不过也可做) 好神仙啊,原来欧拉序是可以求任意两点的点,不过要加lca。 代码 #include <bits/stdc++.h> using namespa...

weixin_30883777的博客 102

洛谷 SP10707 COT2 - Count on a tree II(树上莫队)

链接: https://www.luogu.org/problemnew/show/SP10707 题意: 给定一棵nnn个节点的树,每个节点都有一种颜色a[x]a[x]a[x],给定一些查询(x,y)(x,y)(x,y),问xxx到yyy的路径上共有多少种颜色; 分析: 树上莫队,即把树上路径问题转化为区间问题; (之后想补再回来补。。。)下面代码是wa的,没发现哪错了。。 代码: #inclu...

梧桐 346

SP10707 COT2 - Count on a tree II【树上莫队】

SP10707 COT2 - Count on a tree II【树上莫队】 给定一颗无根树,求树上两点路径上的节点有多少不同的数字 可以离线 前提,能够通过某种操作,将树上路径问题,转化成区间问题 这样,类似于求区间不同数,区间众数,区间mex等操作就能通过莫队离线来做了

东君不爱惜 213

SP10707 COT2 - Count on a tree II 莫队+欧拉序

因为本题支持 离线 所以可以用莫队的算法 常见的套路就是把树变成一个序列 而要解决这个题 我们需要使用欧拉序 (感觉更像是括号序列) 从何俞均大佬手中偷来了一个图 这棵树的欧拉序是: 1 2 4 5 5 4 2 3 6 6 7 7 3 1 (一个点第一次出现 视为进入的位置st 第二次出现视为离开的位置ed) 设 u,v是我们要查询的路径 假设 u的遍历顺序(在欧拉序中进入的位置)小于v 如果 u=lca(u,v) 那么 我们选择的遍历序列是 st[u],st[...

weixin_43824564的博客 224

[SP10707]COT2 - Count on a tree II

题目大意:有一棵$n$个节点的树,第$i$个点有一个颜色$C_i$,$m$组询问,每次问$x->y$的路径上有多少种颜色 题解:树上莫队,把树按欧拉序展开成一条链,令第$i$个节点第一次出现在序列中为$in_i$,第二次为$out_i$,每一个询问就是看$in_x->in_y$中只出现一次的节点的颜色,但发现如果$x$不为$x,y$的$lca$的话$lca$不会被计入答案,特判一下就...

weixin_30449453的博客 85

SP10707 COT2 - Count on a tree II 树上莫队模板

SP10707 COT2 - Count on a tree II 树上莫队=树链剖分+莫对算法 给定一个n个节点的树,每个节点表示一个整数,问u到v的路径上有多少个不同的整数。 #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;algorithm&gt; #include&lt;vector&gt; //#define ge...

Qianyri的博客 304

【luogu SP10707】COT2 - Count on a tree II(树上莫队)

给你一棵树,树有颜色,然后多组询问每次问你树上的一条路径上有多少种颜色。

欢迎您的光顾awa 215

SP10707 COT2 - Count on a tree II(求树中两点路径的不同颜色数量+树上莫队)

https://www.luogu.com.cn/problem/SP10707 树上莫队板子。 罗老师的思路: 1、把树的结点用欧拉序转为一维数组   用DFS遍历树的结点,有两种遍历方式,得到两种欧拉序:   (1)在每个结点第一次进和最后一次出都加进序列;   (2)每遇到一个结点就把它加进序列。   这里用第(1)种形式的欧拉序。下图的例子,欧拉序:{1, 2, 2, 3, 5, 5, 6, 6, 7, 7, 3, 4, 8, 8, 4, 1}。 图8 一棵树   (u, v)上的路径

代码笔记本 856
上一篇: 【九校3D2T2】交错的字符串
下一篇: 整体二分初步——静态区间第k大
DancingZ
博客等级 码龄9年 10粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值