[BZOJ Contest-2017省队十连测推广赛2·T2][BZOJ4771][主席树][dfs序]七彩树

“Agent Harness”和“Harness Engineering” 摘要:2026年AI工程化领域,"Agent Harness"(AI代理运行控制系统)与"Harness Engineering"(马具工程方法论)常被混淆。前者是管理AI代理非推理事务的技术实体(工具调用、记忆管理、安全约束等7层架构),后者是设计优化该系统的工程学科。研究表明,优化的Harness设计可使同一模型性能提升10倍。两者关系如同"马具"与"制具工艺":Harness Engineering指导Agent Harn 阅读详情

%%%Manchery

先考虑没有深度限制,要计算子树中不同的颜色的个数,就令所有节点的初始权值为1,就把两两相同颜色的节点的LCA的权值-1,然后求一遍子树权值和就可以了。
但是这样做复杂度是O(n2),而且会在某个节点多次-1。其实只要把颜色相同的节点提出来,按照dfs序的标号排个序,然后在相邻的节点的LCA处-1就行了。

然后考虑有深度限制,仔细想想发现这个限制特别像主席树,那么就以深度排序,以深度为时间点建主席树,那么上面说的对节点修改的操作也要在这个时候做,可以用set维护……

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <set>
#define N 100010

using namespace std;

typedef pair<int,int> pairs;
typedef set<pairs>::iterator itr;

int n,m,t,cnt,g,Ans;
int G[N],A[N],dpt[N],L[N],R[N],w[N],p[N],rt[N];
int fa[N][25];
set<pairs> c[N];
struct edge{
    int t,nx;
}E[N<<2];
struct tree{
    int l,r,ls,rs,sum;
}T[N*100];

inline void reaD(int &x){
    char c=getchar(); x=0;
    for(;c>57||c<48;c=getchar());for(;c>=48&&c<=57;x=x*10+c-48,c=getchar());
}

inline void Insert(int x,int y){
    E[++cnt].t=y; E[cnt].nx=G[x]; G[x]=cnt;
}

void dfs(int x,int f){
    dpt[x]=dpt[f]+1; fa[x][0]=f;
    L[x]=++g;
    for(int i=1;i<=20;i++) fa[x][i]=fa[fa[x][i-1]][i-1];
    for(int i=G[x];i;i=E[i].nx)
        dfs(E[i].t,x);
    R[x]=++g;
}

inline int LCA(int x,int y){
    if(dpt[x]<dpt[y]) return LCA(y,x);
    for(int i=20;~i;i--)
        if(dpt[fa[x][i]]>=dpt[y]) x=fa[x][i];
    if(x==y) return x;
    for(int i=20;~i;i--)
        if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
    return fa[x][0];
}

inline bool cmp(int a,int b){
    return dpt[a]<dpt[b];
}

void Insert(int x0,int &x1,int y,int w,int l,int r){
    x1=++cnt;
    T[x1].l=l; T[x1].r=r;
    T[x1].ls=T[x0].ls;
    T[x1].rs=T[x0].rs;
    T[x1].sum=T[x0].sum+w;
    if(l==r) return;
    int mid=l+r>>1;
    if(y<=mid) Insert(T[x0].ls,T[x1].ls,y,w,l,mid);
    else Insert(T[x0].rs,T[x1].rs,y,w,mid+1,r);
}

int query(int x,int l,int r){
    if(!x) return 0;
    if(T[x].l==l&&T[x].r==r) return T[x].sum;
    int mid=T[x].l+T[x].r>>1;
    if(r<=mid) return query(T[x].ls,l,r);
    if(l>mid) return query(T[x].rs,l,r);
    return query(T[x].ls,l,mid)+query(T[x].rs,mid+1,r);
}

void build(int &x,int l,int r){
    x=++cnt;
    T[x].l=l; T[x].r=r; T[x].sum=0;
    if(l==r) return ;
    int mid=l+r>>1;
    build(T[x].ls,l,mid);
    build(T[x].rs,mid+1,r); 
}

int main(){
    reaD(t);
    while(t--){
        reaD(n); reaD(m);
        memset(G,0,sizeof(G)); cnt=g=0; dpt[1]=1;
        for(int i=1;i<=n;i++) reaD(A[i]),c[i].clear();
        for(int i=2,u;i<=n;i++)
            reaD(u),Insert(u,i);
        dfs(1,0);
        for(int i=1;i<=n;i++) p[i]=i;
        sort(p+1,p+1+n,cmp); cnt=0; rt[1]=0;
        build(rt[1],1,g);
        Insert(rt[1],rt[1],L[p[1]],1,1,g); c[A[1]].insert(pairs(L[1],1));
        for(int i=2;i<=n;i++){
            int v=p[i],u=p[i-1];
            Insert(rt[dpt[u]],rt[dpt[v]],L[v],1,1,g);
            if(c[A[v]].empty()) c[A[v]].insert(pairs(L[v],v));
            else{
                c[A[v]].insert(pairs(L[v],v));
                itr a=c[A[v]].find(pairs(L[v],v));
                itr y=--a,x; a=c[A[v]].find(pairs(L[v],v)); x=++a;
                if(x!=c[A[v]].end()&&y!=c[A[v]].end())
                    Insert(rt[dpt[v]],rt[dpt[v]],L[LCA(x->second,y->second)],1,1,g);
                if(x!=c[A[v]].end()) 
                    Insert(rt[dpt[v]],rt[dpt[v]],L[LCA(x->second,v)],-1,1,g); 
                if(y!=c[A[v]].end()) 
                    Insert(rt[dpt[v]],rt[dpt[v]],L[LCA(y->second,v)],-1,1,g);
            }
        }
        Ans=0;
        for(int i=1,u,v;i<=m;i++){
            reaD(u); reaD(v); u^=Ans; v^=Ans;
            printf("%d\n",Ans=query(rt[min(dpt[u]+v,dpt[p[n]])],L[u],R[u]));
        }
    }
}
【人工智能】你知道什么是DeepSeek吗?你有去了解过DeepSeek吗?新手要入门DeepSeek的必经之路——初识DeepSeek 【人工智能】初识DeepSeek 详细介绍DeepSeek以及DeepSeek-R1 阅读详情

相关推荐

注册“Oracle Provider for OLE DB”和创建链接服务器

注册“Oracle Provider for OLE DB”和创建链接服务器 在sql server 数据库上创建链接服务器,连接oracle数据库,访问接口需要设置为:“Oracle Provider for OLE DB”。 如果电脑上没有这个驱动,安装一个完整的Oracle11gR2程序是一个有效的方法,但这个64位版本的安装包有2个多G, 相当庞大,如果仅仅...

weixin_30760895的博客 2383

BZOJ4771 - 七彩树——贪心、思维、主席树

摘要的作用: 摘录部分文句× 扯几把谈√

偶耶的博客 434

unity 腾讯地图sdk移动和缩放代码

unity 腾讯地图sdk 实现移动端 缩放 和 移动

。。。。。 1282

【BZOJ】4771: 七彩树 -线段树合并&主席树&set

传送门:bzoj4771 题解 为满足深度和子树两个限制,预处理出dfsdfsdfs序和每层的点,然后按深度递增,dfsdfsdfs序为下标建立主席树,每次询问查询(rt[depx+d],in[x],ot[x])(rt[depx+d],in[x],ot[x])(rt[dep_x+d],in[x],ot[x]),[in[x],ot[x]][in[x],ot[x]][in[x],ot[x]...

远行客 569

【ArcGIS遇上Python】使用add-in向导开发ArcGIS插件(1):add-in工具介绍及安装

文章目录addin介绍addin下载addin安装 addin介绍 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作。相对于以往9.x系列,addin的无论是从使用或者编写都更加方便快捷。通过开发语言,可以制作ArcGIS Desktop各个软件模块的插件。 Esri提供了Python加载项向导工具来实现Addin界面的搭建,可以到Esri官网去下载该工具Python加载项向导 。从介绍来看,该设计器要求的最低ArcGIS版本为10.1 ,如下图所示: add

智慧空间实验室 7200

Motoman机器人离线编程——Motocom32开发简介

欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程——Motocom32开发简介 Motoman机器人离线编程——Visio Studio环境配置 Motoman机器人离线编程——Motocom32库函数的使用与封装 Motoman机器人离线编程——Motocom32参考文献及注意事项 Motoman机器人离线编程——MotocomES介绍 ...

冯Jungle的个人博客 8713

BZOJ4771: 七彩树

4771: 七彩树 Time Limit:5 SecMemory Limit:256 MBSubmit:2490Solved:715[Submit][Status][Discuss] Description 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节 点的颜色为c[i]。如果c[i]=c[j],...

weixin_30699831的博客 277

华为od 面试八股文_C++_01_含答案

华为od 面试八股文_C++_01_含答案

MISAYAONE的博客 5588

【2SAT+Trie】Gym101190B [NEERC2016] Binary Code

【题目】 Gym 给定一些二进制编码,每个编码至多有一个位置不知道是什么。问是否存在一种补全编码方式,使得没有任何一个编码是另一个编码的前缀。 n,∑∣s∣≤5×105n,\sum|s|\leq 5\times 10^5n,∑∣s∣≤5×105 【解题思路】 两个之中的选择实际上就是一个2-SAT\text{2-SAT}2-SAT模型。但是我们暴力建图会凉凉,那么考虑用Trie\text{Trie...

MEET YOU FIRST TIME 659

Python 爬虫实战:Boss直聘 Python 岗位招聘数据爬取

本文介绍了一个Python爬虫项目,用于抓取Boss直聘平台的Python岗位招聘数据并进行可视化分析。项目采用requests库发送POST请求,通过抓包分析获取JSON接口,绕过HTML解析直接获取结构化数据。主要内容包括: 接口分析:找到关键POST接口,解析请求头和JSON参数格式 环境准备:安装requests/pandas/matplotlib/pyecharts等依赖库 核心实现: 手动获取登录Cookie 构建请求头和城市代码映射 实现分页抓取职位列表数据 项目特色在于直接解析JSON接口而

u014481728的博客 296

基于PyQt5和OpenCV的传统图像分割应用UI程序

主要功能包括:加载和显示图像应用多种图像分割算法调整算法参数保存处理结果。

Henry的博客 471

题解 [BZOJ4771] 七彩树

题意 DBZOJ4771 给定 nnn 个点的有根树,根节点为 111。每个点有颜色 cic_ici​。定义深度 depi\text{dep}_idepi​ 为 iii 节点到 111 节点边的个数。 mmm 个问题,每次给定 x,dx, dx,d,询问 xxx 的子树中所有深度在 [depx,depx+d][\text{dep}_x, \text{dep}_x + d][depx​,depx​+...

wyy603的博客 469

ssm框架搭建

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

[BZOJ 4771]七彩树(可持久化线段树+树上差分)

[BZOJ 4771]七彩树(可持久化线段树+树上差分) 题面 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离。为了方便起见,你可以认为树上相邻的两个点之间的距离为1。站在这棵色彩斑斓的树前面,你将面临m个问题。 每个...

weixin_30488085的博客 348

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【BZOJ4771】—七彩树(主席树)

传送门

Stargazer的博客 607

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

BZOJ4771:七彩树 (LCA+Treap+可持久化线段树)

题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4771题目分析:一道很妙的题。先简化问题:假设没有深度限制,问题就变成了一棵子树中本质不同的颜色个数。只要将DFS序搞出来,就变成了一段区间中不同的数的个数,这个直接用可持久化线段树就可以解决了。有深度限制怎么办呢?我们可不可以按深度顺序将这些点加入主席树呢?答案是不可以的。因为以深度为顺序

KsCla 1230

BZOJ - 4771 七彩树 (可持久化线段树合并)

题目链接 对每个结点建立两棵线段树,一棵记录该结点的子树下每种颜色对应的最小深度,另一棵记录子树下的每个深度有多少结点(每种颜色的结点只保留最浅的深度即可),自底而上令父节点继承子结点的线段树,如果合并两棵颜色线段树时发现某种颜色重复,则在深度线段树上把较深的深度对应的位置-1。 注意由于强制在线,深度线段树的合并以及更新都需要可持久化。 (ps:不能用map代替颜色线段树,会TLE~~) ...

weixin_30791095的博客 232

bzoj 4771: 七彩树

题意 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离,为了方便起见,你可以认为树上相邻的两个点之间的距离为1。站在这棵色彩斑斓的树前面,你将面临m个问题。 每个问题包含两个整数x和d,表示询问x子树里且depth不...

OZY的博客 715

bzoj 4771: 七彩树 树链的并+可持久化线段树

题意给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离,为了方便起见,你可以认为树上相邻的两个点之间的距离为1。站在这棵色彩斑斓的树前面,你将面临m个问题。每个问题包含两个整数x和d,表示询问x子树里且depth不超过dep

beginend 571

BZOJ 4771 七彩树 | scz 8.5 逆向思维(强制在线)

题目大意 给一颗\(n\)个节点的有根树,每个节点有一个颜色\(c_i(1 \le c_i \le n)\),设节点\(x\)的深度为\(deep_x\),回答\(m\)次询问,每次询问形如: x d 询问\(x\)子树里深度不超过\(deep_x + d\)的所有节点的颜色种数 \(T\)组测试,每组测试相互独立,强制在线。\(T \le 500,n,m \le 1 \times 10^5...

woshidalaocxy的博客 886

【BZOJ4771】七彩树 主席树+树链的并

【BZOJ4771】七彩树 Description 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离,为了方便起见,你可以认为树上相邻的两个点之间的距离为1。站在这棵色彩斑斓的树前面,你将面临m个问题。...

aodanchui1057的博客 187

【bzoj4771】七彩树 树链的并+STL-set+DFS序+可持久化线段树

题目描述 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离,为了方便起见,你可以认为树上相邻的两个点之间的距离为1。站在这棵色彩斑斓的树前面,你将面临m个问题。每个问题包含两个整数x和d,表示询问x子树里且d...

weixin_30624825的博客 182

[BZOJ4771]七彩树

BZOJ4771 七彩树 BZOJ 不强制在线的话可以树上启发式合并做两个log 然后强制在线的话可以set维护树链的并,然后主席树维护每个深度的答案(下标dfs序) 至于树链的并怎么维护,把同颜色的点放在一个set里,每次查点u的前驱后继,把前驱pre和u的lca--,把后继suc和u的lca--,把suc和pre的lca++,u也要++ 然后空间是4log(每个点最多修改4次),大概...

172

BZOJ 4771: 七彩树 树链的并,可持久化线段树

题目 ⾸先不管深度限制,我们只考虑如何统计⼦树内本质不同的种类数。 维护链并即可。 对于每⼀种灵魂,我们使⽤⼀个 维护其在树上的 序。 那么插⼊⼀个点时,我们对应修改链并即可。 修改⽅法为:在该点l+1,在其与前趋、后继的 lca处-1,在前趋、后继的lca 处+1。 那么此时求某个点⼦树内本质不同的种类数就变成了求⼦树的权值和,线段树维护即可。 有了深度限制怎么办? 我们将点按照深度排序,然后按...

Freopen的博客 238

【BZOJ4771】七彩树(主席树)

【BZOJ4771】七彩树(主席树) 题面 BZOJ 题解 如果没有深度限制,每次只询问子树内的颜色个数,除了树套树\(dfs\)序加前驱或者后继强行二维数点之外,还有这样一种做法: 把所有相同颜色的点按照\(dfs\)序排序,每个点给自己的位置贡献\(1\),相邻的两个点给\(lca\)贡献\(-1\)。然后只要区间内存在这种颜色,则其子树内的权值和必定为\(1\)。那么只需要这样子染好所有颜色...

weixin_30945039的博客 184

BZOJ4771 七彩树

很厉害的题 orz了网上的题解,大家似乎都在orz雯舞,那我也赶紧Orz吧,前两天刚在BZOJ把我超了-_-orzorz 然后这题的话,先考虑没有深度的条件 先令每个点的贡献都是1,那么如果有同色点,他们的lca的贡献就要减一,而我们知道取dfs序相邻的两个点的话lca最深,所以令同色点dfs序相邻的点贡献-1,然后答案就是子树和 考虑深度限制,我们对于每一个i,维护只考虑所有深度 考虑

neither_nor 1980

【NTT】BZOJ5217 [Lydsy2017省队十连测]航海舰队

分析: 总的来说就两步: 1、二位匹配,询问每个位置能否放置。 2、得到移动范围,求覆盖位置 两个都可以用二位 卷积做。 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;algorithm&amp;gt; #include&amp;lt;cmath&amp;gt; #define SF scanf #define PF printf #

氧化钠的博客 297
上一篇: [BZOJ Contest-2017省队十连测推广赛1·T1][BZOJ4765][分块][dfs序]普通计算姬
下一篇: [BZOJ2228][Zjoi2011][单调队列]礼物(gift)
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值