SPOJ QTREE3 Query on a tree again!(树链剖分)

GO与KEGG富集分析实战:从差异基因到功能注释 本文详细介绍了GO与KEGG富集分析的完整实战流程,从差异基因列表出发,通过基因ID转换、核心分析到结果可视化,系统阐述了如何将基因数据转化为生物学洞察。文章重点讲解了使用R语言clusterProfiler包进行GO和KEGG富集分析的具体步骤、参数设置及常见问题解决方案,并强调了结果解读与生物学故事构建的方法,帮助研究者深入理解差异基因的集体功能倾向。 阅读详情

题意:

一颗树上,每个节点只有黑和白两种状态,最初都是白,现在有两种操作,一种问[1,x]中离1最近的黑节点编号,另一种把x节点取反

思路:

有点巧妙的树链剖分
我们知道,树链剖分是从根向下进行标号的,那么我们就可以以1作为根,这样我们在向上爬的过程中,每次从线段树中拿到的标号必然是最优的(线段树优先向左,这一点和我们在树链剖分里面的标记方式正好吻合),这样我们不断更新ans即可

错误及反思:

我在代码里面有一段注释,是一个可能会写错的坑点,我wa了好多遍才想到的

代码:

#include<bits/stdc++.h>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define fi first
#define se second
using namespace std;
const int N =100010;

int segtree[N*4];//-1 for both
pair<int,int> e[N*2],b[N];
int tot,tid;
int top[N],si[N],fa[N],fi[N],son[N],depth[N],id[N],rnk[N],q,n;

void addedge(int x,int y){
    e[tot].fi=y;
    e[tot].se=fi[x];
    fi[x]=tot++;
    e[tot].fi=x;
    e[tot].se=fi[y];
    fi[y]=tot++;
}
void dfs1(int now,int bef,int dep){
    fa[now]=bef;
    depth[now]=dep;
    si[now]=1;
    for(int i=fi[now];i!=-1;i=e[i].se)
        if(e[i].fi!=bef)
        {
            dfs1(e[i].fi,now,dep+1);
            si[now]+=si[e[i].fi];
            if(son[now]==-1) son[now]=e[i].fi;
            else son[now]=si[e[i].fi]>si[son[now]]?e[i].fi:son[now];
        }
}
void dfs2(int now,int tp){
    top[now]=tp;
    id[now]=tid++;
    if(son[now]!=-1) dfs2(son[now],tp);
    for(int i=fi[now];i!=-1;i=e[i].se)
        if(e[i].fi!=fa[now]&&e[i].fi!=son[now])
            dfs2(e[i].fi,e[i].fi);
}
void init(){
    memset(segtree,0,sizeof(segtree));
    tot=0; tid=1;
    memset(first,-1,sizeof(first));
    memset(son,-1,sizeof(son));
}
int query(int L,int R,int l,int r,int rt){
    if(segtree[rt]==0) return -1;
    if(L<=l&&R>=r&&segtree[rt]==1) return rnk[l];
    int m=(l+r)/2;
    int ans=-1;
    if(m>=L) ans=query(L,R,lson);
    if(ans!=-1) return ans;
    if(m<R) ans=query(L,R,rson);
    return ans;
    /*
    这里必须这样判断,不能这样
    if(m>=L&&segtree[rt<<1]) ans=query(L,R,lson);
    else if(m<R&&segtree[rt<<1|1]) ans=query(L,R,rson);
    注释里的写法会忽略一个问题,我左边是有1,但是并不一定在[L,R]的区间
    */
}
int modify(int L,int R){
    int f1=top[L],f2=top[R];
    int ans=-1;
    while(f1!=f2)
    {
        if(depth[f1]<depth[f2])
        {
            swap(f1,f2);
            swap(L,R);
        }
        int ta=query(id[f1],id[L],1,tid-1,1);
        ans=ta==-1?ans:ta;
        L=fa[f1];
        f1=top[L];
    }
    if(depth[L]>depth[R]) swap(L,R);
    int ta=query(id[L],id[R],1,tid-1,1);
    ans=ta==-1?ans:ta;
    return ans;
}
void update(int p,int l,int r,int rt){
    if(l==r){
        segtree[rt]^=1;
        return ;
    }
    int m=(l+r)/2;
    if(m>=p) update(p,lson);
    else update(p,rson);
    if(segtree[rt<<1]==segtree[rt<<1|1]) segtree[rt]=segtree[rt<<1];
    else segtree[rt]=-1;
}
int main(){
    init();
    scanf("%d%d",&n,&q);
    for(int i=0,u,v;i<n-1;i++){
        scanf("%d%d",&u,&v);
        addedge(u,v);
    }
    dfs1(1,1,1);
    dfs2(1,1);
    for(int i=1;i<=n;i++)
        rnk[id[i]]=i;
    while(q--){
        int op,ta;
        scanf("%d%d",&op,&ta);
        if(op)
            printf("%d\n",modify(1,ta));
        else update(id[ta],1,tid-1,1);
    }
}
uniapp串口通信实战:从零搭建物联网设备控制App(附完整代码) 本文详细介绍了如何使用Uniapp实现串口通信,从零搭建物联网设备控制App。内容涵盖环境配置、串口初始化、数据收发、错误处理等核心功能,并提供了完整的代码示例,帮助开发者快速掌握跨平台串口通信技术,适用于智能农业、工业自动化等物联网场景。 阅读详情

相关推荐

如何用DETR(detection transformer)训练自己的数据集

DETR(detection transformer)简介 DETR是Facebook AI的研究者提出的Transformer的视觉版本,是CNN和transformer的融合,实现了端到端的预测,主要用于目标检测和全景分割。 DETR的Github地址:link

weixin_50233398的博客 3万+

[SPOJ QTREE3]Query on a tree again!

题目链接:https://www.spoj.com/problems/QTREE3/ 大意 给一棵有nnn个节点的树,树上每个节点可以是黑色或白色,起初所有节点都是白色,有Q个操作,操作的输入格式为 aaa bbb a=0a=0a=0时,代表改变节点bbb的颜色 a=1a=1a=1时,代表要求输出从节点111到节点bbb的路径上第一个黑色的点的编号,若不存在黑色的点则输出-1。 思路 树链剖分...

asdkjc的博客 228

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南

在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通

weixin_33984032的博客 455

动态树LCT||树链剖分+线段树(SPOJ QTREE3 - Query on a tree again!)

QTREE3 - Query on a tree again! no tags  English Vietnamese You are given a tree (an acyclic undirected connected graph) with N nodes. The tree nodes are numbered from 1 to N.

龙崎的专栏 997

从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)

本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。

salt9的博客 653

抖音无水印视频解析全攻略:从原理到2025实战工具推荐

短视频创作和素材整理绕不开一个基础需求:如何从抖音等平台获取不带水印的清晰视频。这背后涉及的其实是常见的链接解析与播放地址还原技术——平台对外分发带水印的地址,但源视频文件往往存在可访问的公开入口。理解这一原理,不仅能帮我们判断工具是否安全,也能避免在搜索“抖音视频解析”、“无水印视频下载”时踩坑。无论是剪辑师收集二创素材、运营人员备份品牌内容,还是普通用户保存高清视频,掌握一套稳定、合规的下载方法都很有价值。本文从水印生成机制讲起,梳理了网页工具、插件、脚本等不同实现形态的优缺点,并给出2025年仍然有效

weixin_42666036的博客 440

SPOJ QTREE3 - Query on a tree again!

题目链接:https://www.spoj.com/problems/QTREE3/ 感谢Konjak谷弱博客的启发 题目分析 0 i : change the color of the i-th node (from white to black, or from black to white); 1 v : ask for the id of the first black node ...

tangzhide123yy的博客 389

手把手教你用键盘在Ubuntu上给Lerobot机械臂采集HIL-SERL训练数据(附完整配置文件)

本文详细介绍了在Ubuntu系统中使用键盘控制Lerobot机械臂进行HIL-SERL训练数据采集的完整流程。从环境准备、机械臂校准到键盘遥操系统配置和数据采集优化,提供了实战指南和常见问题解决方案,帮助读者高效获取高质量训练数据,推动具身智能和强化学习应用的发展。

weixin_30733003的博客 477

spoj QTREE3 Query on a tree again!

树链剖分

YHaX的博客 454

SAP UI5 SimpleForm 的本质、布局选择与工程化用法:从 API 到 Fiori 规范的完整解析

SimpleForm的价值在于让开发者以“语义顺序”来思考表单:分组—行—字段,由此把更多精力放在表单信息架构与Fiori规范的落地上。当你理解了开分组、Label开新行、的断点与比例、的对齐特性、editable与的真实含义,就能据此为每个页面挑选合适的布局与参数,构建既合规又具备高可读性的企业级表单。新分组、Label新行、其他控件归当前行。SAP的断点、比例与的要点来自Fiori设计文档。SAP的适用性来自样例与课程的推荐,列表类控件不应作为其行内容。某些旧属性仅在生效,应避免误用。

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

【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiR

【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM, RandomCAM, EigenGradCAM等

静谧、淡雅 2389

SPOJ - QTREE Query on a tree树链剖分

SPOJ - QTREE Query on a tree树链剖分 You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3…N-1. We will ask you to perfrom some instructions of the fol

weixin_40433319的博客 327

Claude Code(7):从零创建你的第一个 Skill

在前面的文章,我们介绍了 Skills 的基本概念,这篇我们深入实战,从零开始创建你的第一个 Skill,并逐步解锁所有配置项,让 Claude Code 真正熟悉你的测试规范和习惯。

blues_C的博客 646

SPOJ QTREE3Query on a tree again!(树链剖分+树状数组+二分)

SPOJ QTREE3Query on a tree again!(树链剖分+树状数组+二分) 题目大意 现在有一颗树,其所有的节点都为白色。有两种操作 ,一是将一个节点的颜色进行反转(即黑色变成白色,白色变成黑色),一是查询1号节点和v节点路径上深度最小的那个黑色节点 解题思路 设黑色的节点权值为1,白色的节点权值为0,对树进行剖分后用树状数组维护前缀和。对于每次查询,先找出节点v在上升到1号节...

FLY_WHITE的博客 194

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SPOJ QTREE 375. Query on a tree

SPOJ Problem Set (classical) 375. Query on a tree Problem code: QTREE You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3...N-1. We wi

码代码的猿猿 1407

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SPOJ - QTREE3Query on a tree again!——树链剖分

【题目描述】 SPOJ - QTREE3Query on a tree again! 【题目分析】 题目要求是输出从111到xxx的路径上遇到的第一个黑色的点。我们可以用树链剖分(不了解的同学请出门左拐,详见树链剖分入门) 我们用线段树维护每个区间第一次遇到黑点的位置,这样访问出的点同样是从1开始路径上的第一个点。因为我们总是从根节点1开始,我们在访问的时候从后往前每次访问重链时在线段树上都是一...

T_T233333333的博客 269

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SPOJ QTREE - Query on a tree 【树链剖分】

QTREE - Query on a tree #number-theory You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3...N-1. We will ask you to perfrom some instruc

世界很大 550

kyeremal-spoj375-Query on a tree-树链剖分

spoj275-Query on a tree 原题: QTREE - Query on a tree no tags  You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3...N-1. We will ask

kyeremal的专栏 554

SPOJ 375. Query on a tree【树链剖分】

http://www.spoj.pl/problems/QTREE/ 给一颗树,每条边有一个权值。有两种操作:1、修改某条边的值;2、询问a、b两点路径上边权的最大值。 树链剖分。 #include #include #include #include #include #include using namespace std; const int maxn = 10010;

~飞呀,飞~ 1752

[spoj QTREE Query on a tree]树链剖分

[spoj QTREE Query on a tree]树链剖分题目链接:[spoj QTREE Query on a tree] 题意描述:给定一棵顶点数为N的带权树。有Q次操作,每次操作或者改变第ii条边的权值,或者查询顶点uu到vv的路径上面的最长边。 解题思路: 树链剖分的入门题。今天比较系统的学习了一下树链剖分。其实树链剖分就是将树上的边(点)映射到若干条连续的线段上。然后结

Fighting! 662

SPOJ Query on a tree VI 树链剖分 树状数组

链接 https://vjudge.net/problem/SPOJ-QTREE6 题解 写得我脑壳疼,参考了不少题解,加深了对树剖的理解 用W[u]W[u]W[u]维护当前局势下,如果uuu为白色,uuu为根的子树中和uuu联通的个数 用B[u]B[u]B[u]维护当前局势下,如果uuu为黑色,uuu为根的子树中和uuu联通的个数 那么,对于询问操作,向上找到最远的与uuu同色的节点xxx,那么...

Spy97的博客 230

spoj375QTREE - Query on a tree(树链剖分)

题目链接 QTREE - Query on a tree #tree You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3...N-1. We will ask you to perfrom some instru

fouzhe的博客 528

spoj375QTREE - Query on a tree【树链刨分】

QTREE - Query on a tree #number-theory You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3...N-1. We will ask you to perfrom some instruc

走一步再走一步 809

SPOJ - QTREE Query on a tree 树链剖分模板题

传送门:SPOJ - QTREE 题意:给出一棵树,和两种操作: 1.把第i条边的权值改成ti。 2.询问a节点到b节点之间的路径中的最大边权值。 思路:树链剖分裸题。 树链剖分学习:点击打开链接 个人理解:树链剖分有点类似于树的dfs序 + 线段树维护,不过是用各种数据结构去维护划分出来的边罢了。 代码: #include #define ll long long #define

WA是一笔财富 251

SPOJ QTREE Query on a tree

树链剖分

sdfzrlt的博客 445

SPOJ 375 QTREE Query on a tree 树链剖分

题目:http://www.spoj.com/problems/QTREE/en/ 题意:给定一棵有n个点的树,每条边都有权值。有两种操作,第一种是询问两点间路径上边权的最大值,第二种是改变输入顺序中第i条边的权值 思路:树链剖分第一题。 siz[v]表示以v为根的子树的节点数 dep[v]表示v的深度(根深度为1) top[v]表示v所在的链的顶端节点 fat[v]表

弱智就要多努力 533
上一篇: SPOJ QTREE2 Query on a tree II (倍增LCA)
下一篇: BZOJ 2243 染色(树链剖分)
Roll_Keyboard
博客等级 码龄9年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值