SPOJ COT 树上第K大(LCA+主席树)

5、自适应 RBF 神经网络控制方法解析 本文详细解析了基于RBF神经网络的多种自适应控制方法,包括针对函数未知、参数未知以及存在外部干扰的非线性系统的控制策略。通过李雅普诺夫稳定性理论设计自适应律,确保闭环系统稳定,并结合仿真示例和MATLAB代码实现,展示了方法的有效性。文章还对比了不同控制方法的适用场景,并给出了实际应用流程,为复杂系统控制提供了系统性解决方案。 阅读详情

转载请注明出处,谢谢http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents    by---cxlove

题目:给出一棵树,问两个节点之间路径经过的结点的权值的第k小的数。
为了做这题,先去学了一下DFS+RMQ的LCA求法。

这题和普通的第K大类似。
普通的第K大,是从后往前建立主席树,前一个在后一个的基础上修改。
而树上第K大,依旧是每个结点一棵主席树,是在父节点的基础上修改。
那么可以发现这棵主席树是包括所有祖先结点的(就是深度在当前结点之上的)
查询的时候,是两个结点的值的和,还要减掉lca以上的部分。同时要注意处理lca这个 结点的值。
主要不同便是建树是根据父结点,以前查询的时候注意两个主席树的公共部分。

至于我写的效率略低啊,不加输入外挂会TLE。。。
SPOJ的运行速度,勉强卡过
#include<iostream>  
#include<cstdio>  
#include<map>  
#include<cstring>  
#include<cmath>  
#include<vector>  
#include<algorithm>  
#include<set>  
#include<stack>
#include<string>  
#include<ctime>
#include<queue>  
#include<cassert>
#define inf 1000000005  
#define M 10000005 
#define N 110005
#define maxn 210005  
#define eps 1e-8
#define zero(a) fabs(a)<eps  
#define Min(a,b) ((a)<(b)?(a):(b))  
#define Max(a,b) ((a)>(b)?(a):(b))  
#define pb(a) push_back(a)  
#define mp(a,b) make_pair(a,b)  
#define mem(a,b) memset(a,b,sizeof(a))  
#define LL long long  
#define MOD 1000000007
#define sqr(a) ((a)*(a))  
#define Key_value ch[ch[root][1]][0]  
#define test puts("OK");  
#define pi acos(-1.0)
#define lowbit(x) ((-(x))&(x))
#define HASH1 1331
#define HASH2 10001
#define C   240  
#define vi vector<int>
#define TIME 10  
#pragma comment(linker, "/STACK:1024000000,1024000000")  
using namespace std;
void scanf_(int &num){
    char in;  
    while((in=getchar())>'9'||in<'0'); 
    num=in-'0';   
    while(in=getchar(),in>='0'&&in<='9')   
        num*=10,num+=in-'0';
} 
int n,q,a[N];
vi edge[N];
/*              HASH部分            */
int t[N],m;
void Init_hash(){  
    for(int i=1;i<=n;i++)  
        t[i]=a[i];  
    sort(t+1,t+1+n);  
    m=unique(t+1,t+1+n)-t-1;  
}  
int hash(int x){  
    return lower_bound(t+1,t+1+m,x)-t;  
}  
/*              HASH部分             */
/*              主席树部分           */
int T[M],lson[M],rson[M],c[M],tot=0;
int bulid(int l,int r){
    int root=tot++;
    c[root]=0;
    if(l!=r){
        int mid=(l+r)>>1;
        lson[root]=bulid(l,mid);
        rson[root]=bulid(mid+1,r);
    }
    return root;
}
int update(int root,int pos,int val){
    int newroot=tot++,tmp=newroot;
    c[newroot]=c[root]+val;
    int l=1,r=m;
    while(l<r){
        int mid=(l+r)>>1;
        if(pos<=mid){
            lson[newroot]=tot++;rson[newroot]=rson[root];  
            newroot=lson[newroot];root=lson[root];  
            r=mid;  
        }
        else{
            rson[newroot]=tot++;lson[newroot]=lson[root];  
            newroot=rson[newroot];root=rson[root];  
            l=mid+1;  
        }
        c[newroot]=c[root]+val;
    }
    return tmp;
}
int query(int left_root,int right_root,int LCA,int k){
    int lca_root=T[LCA],pos=hash(a[LCA]);
    int l=1,r=m;
    while(l<r){
        int mid=(l+r)>>1;
        int t=c[lson[left_root]]+c[lson[right_root]]-2*c[lson[lca_root]]+(pos>=l&&pos<=mid);
        if(t>=k){
            left_root=lson[left_root];
            right_root=lson[right_root];
            lca_root=lson[lca_root];
            r=mid;
        }
        else{
            k-=t;
            left_root=rson[left_root];
            right_root=rson[right_root];
            lca_root=rson[lca_root];
            l=mid+1;
        }
    }
    return l;
}
/*              主席树部分           */
/*              LCA部分            */
int depth=0,b[N*2],cnt=0;
int p[N],f[N];
void dfs(int u,int pre){
    int t=++depth;
    b[++cnt]=t;
    f[t]=u;
    p[u]=cnt;
    T[u]=update(T[pre],hash(a[u]),1);
    for(int i=0;i<edge[u].size();i++){
        int v=edge[u][i];
        if(v==pre) continue;
        dfs(v,u);
        b[++cnt]=t;
    }
}
int dp[N*2][20];
void Init_rmq(int n){
    for(int i=1;i<=n;i++)
        dp[i][0]=b[i];
    int m=floor(log(n*1.0)/log(2.0));  
    for(int j=1;j<=m;j++)
        for(int i=1;i<=n-(1<<j)+1;i++)
            dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);  
}
int rmq(int l,int r){  
    int k=floor(log((r-l+1)*1.0)/log(2.0));  
    return min(dp[l][k],dp[r-(1<<k)+1][k]);  
}  
int lca(int a,int b){
    if(p[a]>p[b]) swap(a,b);
    return f[rmq(p[a],p[b])];
}
/*              LCA部分            */
int main(){
    scanf_(n);scanf_(q);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<n;i++){
        int u,v;
        scanf_(u);scanf_(v);
        edge[u].pb(v);
        edge[v].pb(u);
    }
    Init_hash();
    T[0]=bulid(1,m);
    dfs(1,0);
    Init_rmq(cnt);
    while(q--){
        int u,v,k;
        scanf_(u);scanf_(v);scanf_(k);
        printf("%d\n",t[query(T[u],T[v],lca(u,v),k)]);
    }
    return 0;
}


廖雪峰Python教程[完整版] 廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白 立即下载

相关推荐

三级等保网络拓扑图实战:从零搭建符合标准的医院安全架构

本文详细阐述了如何从零开始设计并搭建符合三级等保标准的医院网络安全架构。文章基于“一个中心,三重防护”的核心框架,深入解析了医院网络分区设计、安全域划分、关键安全设备选型与配置等实战要点,并提供了绘制专业网络拓扑图的技巧与等保测评准备指南,旨在帮助医院IT人员系统化地构建既合规又实用的纵深防御体系。

weixin_29326909的博客 503

spoj-cot2(树上莫队)

题解:因为是树上查询,我们可以在树上做下分块然后莫队,至于怎么分看你的技巧,我是先去学了一下联盟王国的树上分块据说那个操作的分块查询一块是sq~3sq的时间复杂度而且还是比较正统,所以我选择用那个分块,然后接着r我怎么操作呢,我们按dfs序,你会很神奇的发现如果我r按dfs操作的话我这里的操作时间复杂度大约是O(2×siz*n),siz是块数,然后转移怎么转移呢?你可以多画几个树形图自己尝试多种情...

Soul 701

数字图像处理第九章笔记

目录一、腐蚀与膨胀1、腐蚀2、膨胀3、对偶性4、开操作与闭操作二、一些基本的形态学算法1、边界提取2、孔洞填充3、连通分量提取4、凸壳5、细化6、粗化7、骨架8、形态学重建三、灰度级形态学1、腐蚀和膨胀2、开运算和闭运算3、灰度级形态学算法 一、腐蚀与膨胀 1、腐蚀 腐蚀可以去除图像的某些部分。 2、膨胀 膨胀可以连接裂缝。 3、对偶性 膨胀和腐蚀彼此关于集合求补运算和反射运算是对偶的 4、开操作与闭操作 开操作:B对A先腐蚀,再进行膨胀 可以平滑物体轮廓,断开较窄的狭颈并消除较细的突出物。 闭操作

方悔读书迟 1374

SPOJ - COT Count on a tree(树上主席树 求树中路径第 k 小权值 + 倍增 LCA)

树上主席树 求树中路径第 k 小权值 + 倍增 LCA

Jacob0824的博客 463

手把手教你用树莓派蓝牙抓取小米温湿度计2代数据,接入HomeAssistant(附密钥获取避坑指南)

本文详细介绍了如何通过树莓派蓝牙抓取小米温湿度计2代数据并接入HomeAssistant的完整流程。重点解析了获取32位加密密钥的三种方法,包括使用Telink Flasher工具、米家APP抓包和开源工具ATC_MiThermometer,并提供了HomeAssistant集成配置和常见问题排查指南,帮助用户实现稳定可靠的温湿度监测。

一名菜鸟攻城师 778

基于STM32的HC-SR04超声波模块测距(新手级)

本人是嵌入式新手,学习了STM32的部分内容,最近想找些项目做,然后顺便学习了一下HC-SR04超声波模块,学习过程中也参考了一些大佬的文章。本文记录了自己的学习方法和学习过程,同时也希望能和各位大佬交流讨论。

weixin_63758495的博客 2203

SPOJ COT(主席树 + LCA)

题目链接 主席树简单来说就是线段树+前缀和,每个节点的线段树存的是他以及之前所有与他相关节点的信息,现在询问u, v, 设u,v的lca是root, root的父节点是fa[root], 那么左节点的数量就是tVal[ lt[ t[u] ] ] + tVal[ lt[ t[v] ] ] - tVal[ lt[ t[ root ] ] ] - tVal[ lt[ t[fa[root] ] ] ]。 一开始我减了两次root的值,这样root的点就减了两次,就没了,所以就少了root这个点的值,以后写lca的

qq_43555854的博客 327

System Verilog学习笔记(十九)——覆盖率

覆盖率是用来衡量验证精度和完备性的数据指标。也可以告诉我们在仿真时设计的哪些结构被触发,哪些没被触发。高质量的验证需要满足以下三个条件。

ljy77882333的博客 2142

【SPOJ-COT】Count on a tree【主席树】【LCA】

【题目链接】 同【BZOJ2588题解】 除过不强制在线,都是一样的。 /* Pigonometry */ #include #include using namespace std; typedef long long LL; const int maxn = 100005, maxnode = 2000005; int n, m, tot, num[maxn],

BraketBN 781

动态规划之【树形DP】第3课:树形DP应用案例实践2

动态规划之【树形DP】第3课:树形DP应用案例实践2

王老师青少年编程 759

抓包网络调试工具 reqable抓包教程

如果CA根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入CA根证书安装界面,详细步骤请阅读。在API调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用Reqable获取流量,通俗地讲就是抓包。我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。首先,需要启用Reqable的调试功能,点击最右上角的。打开浏览器,输入地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2554

SPOJ - COT 树上路径第k小

SPOJ - COT 题意:求树上路径第k小 思路:开始想树剖到主席树上做, 但是其实不需要,我们都知道求树上2点的距离 l = deep[u] + deep[v] - 2*deep[lca(u,v)],这里的深度deep其实就是路径长度的前缀和,同理可以以此建主席树,每颗线段树的前一个版本就是它的父亲,那么查询 路径 u->v的第k小就是在rt[u] + rt[v] - rt[lca(...

weixin_30326515的博客 251

Python控制TEMI1000/TEMI1500测试温箱

该温箱是我司从昆山振弘检测设备有限公司采购的TEMI 1000,但是控制器用的是韩国的,关于控温箱这个项目,可参考的资料仅有一份官方的manual,里面包含一些命令格式。只要你有温箱,就应该可以向厂家索取该文档。该温箱的通讯接口只有一个RS232接口,要想实现远程控制,需要有串口转USB的线;类似于下图所以,想依靠python来与之进行通信,还是要通过python 的pyserial库,关于怎么安装pyserial,过于简单,这里不做赘述,可自行百度。

xgh1951的博客 1万+

SPOJ COT(树上k大,主席树+LCA)

给出一颗含有n个节点的树,每个节点有个权值。问u到v的路径上第k小的权值是多大。 做法就是主席树+LCA,每个节点建立一颗从根(默认为1)到它的线断树,那么u->v路径的线断树就等于T[u] + T[v] - 2*LCA(u, v) + (l <= a[LCA] && a[LCA] <= r)。 /***************************************** Author

KIJamesQi的博客 682

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SPOJ COT 树上简单路区间第k大(主席树 + lca)

题目 题意 给出一棵 nnn 个节点的数,每个节点有一个权值。之后有 mmm 次询问,每次询问 u,v,ku, v, ku,v,k 表示,树上 uuu 到 kkk 的简单路径上,第 kkk 大的权值是多少 思路 一道图论+数据结构的特别有意思的题目,充分利用了主席树可减的特点。我们查询简单路径 (u,v)(u, v)(u,v) 时,可以通过 dfsdfsdfs 序建立主席树。而路径路径上的信息就是...

ShadowGhostH的博客 412

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SPOJ COT 主席树+LCA(树上第k大)

题意:题目链接:https://vjudge.net/problem/SPOJ-COT 对于给出的一棵树,给出若干询问,问任意两个节点的路径上第k小的节点的权值是多少?思路:主席树的另一种经典问题。 看似与HDU 2665不同,这里是针对树结构,其实思路基本不变。只是在建立主席树的时候,需要根据树的父子关系来构造,也就是节点u的线段树要在u的父亲基础上构建。 另外,在寻找第k大时,需要考虑x到

Bahuia的博客 661

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SPOJ - COT Count on a tree LCA+主席树 树上路径求第K大模板题

SPOJ - COT Count on a tree 题意: 给出一棵树,每个点都自己的权重,然后给出树上的边,要求从节点 u 到节点 v 路径上的第 k 小的权重的大小。 因为权重可能很大,所以需要离散化 思路: 在树上建主席树 每个点建一棵权值线段树,记录从这个点到根的路径上的点权信息。u可以和fa[u]的线段树共用很多信息,所以上主席树!那么 u 到 v 路径上的点权信息,...

没有梦想何以远行 218

Count on a tree(SPOJ COT + 树上第k大 + 主席树 + LCA)

题目链接:https://www.spoj.com/problems/COT/en/ 题目: 题意:   给你一棵有n个节点的树,求节点u到节点v这条链上的第k大。 思路:   我们首先用dfs进行建题目给的树,然后在dfs时进行主席树的update操作。众所周知,主席树采用的是前缀和思想,区间第k大是与前一个树添加新的线段树,而树上第k大则是与父亲节点添加新的线段树,因而...

di6499的博客 148

SPOJ COT - Count on a tree(树链剖分+LCA+主席树,树上第k大)

描述 You are given a tree with N nodes. The tree nodes are numbered from 1 to N. Each node has an integer weight. We will ask you to perform the following operation: u v k : ask for the...

riba2534的博客 980

spoj COT - Count on a tree(主席树 +lca,树上第K大)

您将获得一个包含N个节点的树。树节点的编号从1到Ñ。每个节点都有一个整数权重。 我们会要求您执行以下操作: uvk:询问从节点u到节点v的路径上的第k个最小权重 输入 在第一行中有两个整数Ñ和中号。(N,M<= 100000) 在第二行中有N个整数。第i个整数表示第i个节点的权重。 在接下来的N-1行中,每行包含两个整数uv,它描述了一个边(u,v)。 在接下来的M...

weixin_30376453的博客 79

SPOJ COT——Count on a tree

题目链接:https://www.spoj.com/problems/COT/ 题意:求u到v节点中第k大的数 思路:每次沿着父亲节点建一颗新的树,用lca的树与两节点的树寻找第k大 /* SPOJ - COT 一棵树,n个节点,m个询问,a1...an表示节点的权,n-1条边,u,v,k询问u和v路径上第k大的数 8 5 105 2 9 3 8 5 7 7 1 2 1 3 1 4 3 5...

creator平 170

SPOJ COT Count on a tree 树上第k大(主席树)

题意:http://www.spoj.com/problems/COT/en/ 题意:给定一棵树,树上每个节点都有一个权值,问两点之间路径上第K大值 思路:树上的第k大值,跟区间第k大有些不同,区间第k大每个值在前一个值的基础上新建一棵树,而树上第k大则是在父亲节点的基础上新建一棵树。查询的时候,答案就是root[v] + root[u] - root[lca(v, u)] - root[fa

弱智就要多努力 1950

SPOJ COT Count on a tree 树上主席树 + LCA

SPOJ COT Count on a tree 树上主席树 + LCA前置技能题意思路Code 前置技能 可持久化线段树、LCA可持久化线段树、LCA可持久化线段树、LCA 题意 给一棵树,求(u,v)的最短路径之间第k小的值。给一棵树,求(u,v)的最短路径之间第k小的值。给一棵树,求(u,v)的最短路径之间第k小的值。 思路 看到第k小值就是到可以用主席树维护了。看到第k小值就是到可以用主席树维护了。看到第k小值就是到可以用主席树维护了。 但是一般的主席树是维护一段数列,求区间内的第k值。但是一般的主

狙击美佐的博客 258

树上主席树 + LCA SPOJ - COT【Count on a tree】

树上主席树 + LCA SPOJ - COT【Count on a tree】 https://cn.vjudge.net/contest/304073#problem/B 题意 给定 n 个数、m 次询问以及 n-1 条边(保证建立成一棵树),查询树上 节点x 到 节点y 的路径中第 K 小的结点值是多少。 分析 这题还是花了不少功夫的,树上虽然看上去恐怖,其实做起来和普通主席树没太大区别。 ...

weixin_30248399的博客 152

SPOJ-COT Count on a tree求树上的某条路径上第k小的点(LCA+主席树)

https://vjudge.net/problem/SPOJ-COT 思路:以1为根,类似原来板子的按照线性序列去开新的主席树,这里按照图的先序遍历开新的主席树。一棵树表示该点到根节点的前缀关系。 那么寻找路径上的第k点,利用和LCA的前缀关系。 不过这里和之前https://blog.youkuaiyun.com/zstuyyyyccccbbbb/article/details/109882553这题有个共同的关于LCA点权的重复部分。 在这里通过LL sum=tree[tree[pre].l].sum+t

代码笔记本 295

SPOJ COT Count on a tree(树上路径第k小 主席树)

题意: 求树上A,B两点路径上第K小的数 分析: 同样是可持久化线段树,只是这一次我们用它来维护树上的信息。 我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表上。 比如说我们从一棵树的根节点进行DFS,得到根节点到各节点的距离dist[x]——这是一个根-x路径上点与根节点距离的前缀和。 利用这个前缀和,我们可以解决一些

AC之路 852
上一篇: POJ 1986 Distance Queries(在线LCA)
下一篇: Bzoj 1901 Zju2112 Dynamic Rankings(树状数组+主席树)
ACM_cxlove
博客等级 码龄15年 1421粉丝 430原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值