poj 3321 Apple Tree(线段树)

POJ - 3321Apple Tree (线段树 + dfs序) Description There is an apple tree outside of kaka’s house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple tree. The tree has N forks which are connected by branches. Kaka . 阅读详情

题目大意:

        有一棵树,有n个节点,开始时每个分叉点有1个苹果,现在有m个操作,Q x代表查询x节点及x节点的子节点的苹果总和,C x代表将节点x的状态翻转,有苹果变成没苹果,没苹果变成有苹果。

解题思路:

        从节点1开始,进行一次深搜,根据遍历时间为每个节点编号,进入一个新节点时时间加1,离开时,时间标为从上一个节点离开的时间。那么每个节点的进入时间和离开时间就组成了一个区间[l,r],且当前节点的有无苹果状态存在第l个点上,这个节点及子节点的苹果总和就是[l,r]上的苹果总和。所以问题就变成了一个线段树问题。

注意点:

        本题会卡vector,不建议使用。

代码:

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

struct range{
    int l,r;
};

struct node{
    int l,r;
    int sum;
};

struct tNode{
    int to,next;
    tNode(){to = -1;next = -1;}
};

int n,m,nowPos = 0;;
tNode son[100005];
range a[100005];
node tree[400005];

void dfs(int x){
    a[x].l = ++nowPos;//进入新节点时时间加1
    if(son[x].to != -1){
        int now = son[x].to;
        while(now != -1){
            dfs(now);
            now = son[now].next;
        }
    }
    a[x].r = nowPos;//离开时时间为从上一个节点离开的时间
}

void buildTree(int root,int l,int r){
    tree[root].l = l;
    tree[root].r = r;
    tree[root].sum = r - l + 1;
    if(l != r){
        int mid = (l+r)>>1;
        buildTree(2*root,l,mid);
        buildTree(2*root+1,mid+1,r);
    }
}

void updata(int root,int pos){
    if(tree[root].l == pos && tree[root].r == pos){
        tree[root].sum = 1 - tree[root].sum;
        return;
    }
    int mid = (tree[root].l + tree[root].r)>>1;
    if(pos <= mid){
        updata(2*root,pos);
    }
    else{
        updata(2*root+1,pos);
    }
    tree[root].sum = tree[2*root].sum + tree[2*root+1].sum;
}

int query(int root,int l,int r){
    if(tree[root].l == l && tree[root].r == r){
        return tree[root].sum;
    }
    int mid = (tree[root].l + tree[root].r)>>1;
    if(r <= mid){
        return query(2*root,l,r);
    }
    else if(l > mid){
        return query(2*root+1,l,r);
    }
    else{
        return query(2*root,l,mid) + query(2*root+1,mid+1,r);
    }
}

int main()
{
    char s[5];
    int x,y;
    scanf("%d",&n);
    for(int i = 0; i < n-1; i ++){
        scanf("%d%d",&x,&y);
        son[y].next = son[x].to;
        son[x].to = y;
    }
    dfs(1);
    buildTree(1,1,n);
    scanf("%d",&m);
    for(int i = 0; i < m; i ++){
        scanf("%s %d",s,&x);
        if(s[0] == 'C'){
            updata(1,a[x].l);
        }
        else{
            printf("%d\n",query(1,a[x].l,a[x].r));
        }
    }
    return 0;
}


VMware虚拟机调用NVIDIA显卡全攻略:从3D加速到直通与vGPU 显卡虚拟化技术是虚拟化领域的关键组成部分,它通过在虚拟机中模拟或直接分配物理GPU资源,实现了图形渲染与通用计算的加速。其核心原理在于通过Hypervisor层对GPU指令进行拦截、转换或直接映射,从而平衡资源隔离与性能损耗。这项技术的核心价值在于提升资源利用率、实现计算环境隔离,并支持AI训练、3D渲染、科学计算等高性能负载的灵活部署。在应用场景上,轻量级图形界面加速、CUDA学习验证适合使用虚拟3D加速;而追求极致性能的机器学习训练、专业渲染则需依赖PCIe直通技术;对于企业级GPU资源池化与多租户共享 阅读详情

相关推荐

DeepSeek Harness实战:从零构建插件化AI Agent

AI Agent开发正从硬编码走向框架化组织,插件化架构成为提升工程效率的关键。在构建可复用、可扩展的智能体系统时,开发团队需要一套能够统一管理模型调用、工具注册与上下文组装的基础设施。DeepSeek Harness作为面向Agent工程的插件化框架,通过Harness、DeepAgent与Skill三个核心抽象,将模型、工具与技能解耦为可插拔单元,让开发者无需重复造轮子即可快速搭建具备工具调用能力的智能体。本文从环境配置到Skill插件开发,完整演示如何基于DeepSeek模型构建一个可运行的Agent

weixin_34279184的博客 447

POJ3321 Apple Tree

树状数组+DFS   1.    题意:有一颗苹果树,每个每个节点都能长1个苹果,初始时,苹果是满的,每次可能读取的事件, a)     询问在某个节点为根的子树的苹果总 b)     摘取某节点的苹果 c)     在某个某个节点长出苹果 2.    首先自己写的时候想直接用父子关系来更新每个节点的苹果,结果超时了,后来看了题解才知道还能转化为树状数组,原来树状数组的使用也是很灵活的

A_Mango 464

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 398

【POJ No. 3321】 子树查询 Apple Tree

【POJ No. 3321】 子树查询 Apple Tree

代码改变世界 415

Ubuntu视频播放器怎么选?VLC、mpv、SMPlayer硬解与字幕配置指南

在Linux系统中,视频播放体验取决于播放器、解码器与显卡驱动的协同。硬件解码通过VA-API或VDPAU将解码任务交给GPU,能显著降低CPU占用,解决4K高码率视频卡顿问题。对于Ubuntu用户,合理配置解码环境与播放器,可流畅播放HEVC、多音轨及ASS特效字幕视频。无论是日常观影、番剧追更还是家庭影院场景,选择合适的播放器并正确启用硬解,都是提升体验的关键。本文围绕Ubuntu平台,详解VLC、mpv、SMPlayer等播放器的安装、硬解配置与常见问题排查,帮助你在Linux上获得流畅的本地视频播放

weixin_33801856的博客 506

基于VLFM的中文指令视觉语言导航系统设计与实现

文章摘要 本文介绍了一个基于VLFM(视觉语言边界地图)的中文指令视觉语言导航系统设计与实现。该系统采用模块化架构,包含三维场景渲染、URDF机器人仿真、VLFM导航引擎、中文指令解析和PyQt图形界面五大核心模块。系统支持自定义GLB场景模型和URDF机器人模型,通过transformers和langchain实现中文自然语言指令解析,利用VLFM算法进行语义导航决策。技术实现上详细介绍了GLB模型加载器开发、URDF机器人控制、VLFM导航算法集成以及PyQt界面设计。该系统在Ubuntu环境下运行,依

AI的内部世界的博客 207

poj3321——Apple Tree

题目大意:给出一颗N个节点的苹果树,每个节点只能长一个苹果,根节点标号1。苹果树一开始每个结点都有一个苹果。现在有两种操作,C  x是改变某个节点(如果x节点有苹果就吃掉,如果x结点没有苹果就是长出来一个新苹果);P  x是查询以节点x为根的子树有多少个苹果(包括x节点本身) 输入:N(N ≤ 100,000)            u  v(节点编号,意思是uv两个节点之间有一条边,共N-1

tzyshiwolaogongya的博客 373

【PCIe 总线及设备入门学习专栏 6.1 -- PCIe MCTP】

MCTP 是由 DMTF(Distributed Management Task Force)定义的协议,用于提供设备和主机间基于不同传输层(如 PCIe、I²C、USB 等)的管理消息通信能力。在 PCIe 环境下,MCTP 消息作为的一种特殊形式传输,并被赋予唯一的 VDM Code 值0000b,以区别于其他 VDM。MCTP 在 PCIe 环境中作为一种基于 Type 1 VDM 的管理通信协议,提供了设备与主机之间的灵活数据传输能力。

CodingCos的博客 2127

【poj3321】Apple Tree【树状数组】

描述 卡卡家门外有一棵苹果树。每年秋天,树上都会种很多苹果。卡卡非常喜欢苹果,因此他一直在精心培育大苹果树。 该树有N个分支,这些分支由分支连接。Kaka用1到N对叉进行编号,并且根始终用1编号。在叉上将生长苹果,而在同一叉上将不会生长两个苹果。卡卡想了解子树中有多少苹果,以便研究苹果树的生产能力。 问题在于,有时空叉上会长出一个新苹果,卡卡可能会从树上摘下一个苹果作为甜点。你能帮卡卡吗? 输入 第一行包含一个整数Ñ(Ñ ≤100,000),这是树中的叉的数量。 接下来的N -1行分别包含两个整数u和v,

ssllyr 1010

uniapp - 解决报错Error in event handler for “service.requestComponentInfo“: “TypeError: cannot read prop

uniapp,报错,Error in event handler for "service.requestComponentInfo": "TypeError: cannot read properties of undefined (reading 'matches')",h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,如何解决这个问题,一直报错,uniapp报错Error,都检查了还是报错,怎么解决这个错误,uniapp出现Error in event han

🏆 前端领域优质创作者 6379

Python数据分析师必备:OpenClaw开启Pandas清洗脚本自动生成新时代

本文介绍了OpenClaw这一AI智能体框架如何帮助Python数据分析师高效完成数据清洗工作。OpenClaw通过自然语言交互理解用户需求,自动生成Pandas清洗脚本,显著提升了数据清洗效率,降低了技术门槛。文章详细阐述了OpenClaw的工作原理、实战应用步骤及其在电商、金融、医疗等行业中的成功案例。相比传统手动编写脚本方式,OpenClaw能快速生成规范准确的清洗代码,使数据分析师能更专注于业务洞察。该工具为数据驱动决策提供了可靠支持,是数据分析领域的重要创新。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 230

POJ 3321 Apple Tree(树状数组)

题意:由n个节点形成一颗树,开始时每个节点都有一个苹果,然后对这颗数进行更改和查询。 更改:如果树上有苹果就摘下来,否则这个节点会长出一个苹果。 查询:以这个节点为根节点形成的子树一共有多少个苹果。 题记:先将树dfs遍历一次,利用dfs遍历的顺序记录下每个节点的序号,in[i]表示遍历到i节点的序号,out[i]表示回溯到i节点的序号。 那么以i为节点的子树所涉及到的点为in[i]~out[i]。 用树状数组去解决更改和查询的问题即可。 #include<iostream> using na

moyangxian 325

人工智能数据治理——解读AI时代数据治理白皮书 2025【附全文阅读】

摘要:该白皮书面向企业数字化负责人及AI项目推进人员,探讨AI时代数据治理的战略升级。提出"好数据+好数据知识"双基石理念,强调数据需满足"三高"标准(高精度、一致性、时效性)并构建语义知识库。构建四层治理框架,包括数据采集处理、合规安全、知识库建设及质量改进,并介绍AI赋能治理的新范式,如智能ETL和治理Agent体系。同时分析"软件+AI+好数据"的应用模式,为企业实现智能数据治理提供实践指导。(149字)

cdfunlove的博客 633

线段树 poj3321 Apple Tree

真没想到,,原来树型结构只要稍微处理一下,竟然可以变成赤裸裸的线性结构,然后用线段树去处理! 对于这道题,一开始很难想清楚,如何将树型结构转换 线段树的前提是连续的区间,那能不能将树型结构变成线性结构呢? 我们从根节点按照前序遍历给节点依次编号,对于每个节点,当访问完子树之后,将子树的最大节点也保存,那么这样就能得到一个区间段,见下图: 然后会惊奇的发现,,当我们要

qwb的博客 1036

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

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

POJ 3321 Apple Tree 线段树+DFS

题目大意:有一颗苹果树,开始时每个节点都有一个苹果,有两种操作,一种是问当前节点和它所有的子节点的苹果的个数和,第二个是改变当前节点的苹果数(0到1,1到0) 思路:刚开始直接用题目中给的树进行乱搞,果断TLE,,因为当树退化成链的时候就完蛋了 然后求一部分区间的和当然可以用线段树(本身就是一个树),但是这道题中的树不能直接用线段树,因为不只是叶子节点可以改变(虽然线段树乱搞下应该也可以),而

黑山老猴妖的专栏 999

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ3321-Apple Tree(dfs序+线段树)

poj3321 原题链接:http://poj.org/problem?id=3321Apple TreeTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 30871 Accepted: 9243DescriptionThere is an apple tree outside of kaka's house. Every autu...

Yorozuya 361

【线段树_DFS序】POJ 3321 Apple Tree

POJ 3321 Apple Tree 题意:给出一个N个结点的无根树。但是要将1看作根,也相当于是一个有根树。最初每个结点都有一个苹果。有两种操作,Q x: 以x为根的子树上有多少个苹果;C x: 改变结点x的状态,也就是原来有苹果就摘了,原来没苹果那就长出来一个。 思路:首先我们先将这N个结点跑它的先序遍历(我用的是链式前向星存边,所以实际上是根-右儿子-左儿子的遍历顺序),得到它的DF...

L_X_ 222

Apple Tree POJ - 3321 dfs+线段树

Apple Tree POJ - 3321 There is an apple tree outside of kaka’s house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple ...

weixin_43913594的博客 344

POJ 3321 Apple Tree(线段树 - 维护树上信息)

链接:http://poj.org/problem?id=3321来源:POJ   题意:有一颗以1为根的树,每个结点上都有一个苹果。每次有两种操作:  C x x上的苹果状态发生了改变。如果原来有苹果,那么被摘了;否则,现在放上去一个。  Q x 询问以x为根的子树里共有几个苹果。  思路:使用dfs序,一个子树对应一个区间 #include<cstdio> #include&...

Sun 251

poj 3321 Apple Tree 线段树

题目大意   一个有n个节点的树,树的每个节点可能有一个苹果或没有,有两种操作:   C x 将节点x的权值改变,即如果有一个苹果删掉,否则增加一个苹果。   Q x 询问以节点x为根的子树中有多少个苹果。   数据范围:1   分析   对于棵树进行dfs遍历,并记录每一个点的dfs序号(st[i]),在一个节点的所有儿子都被遍历过后,记录当前en[i]为当前最大dfs序号的节点

A_loud_name 554

Apple Tree POJ - 3321 (线段树+DFS序)

There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple tree. The tree hasN...

Top_Spirit的博客 295

POJ 3321 Apple Tree(dfs序+线段树)

POJ 3321 Apple Tree (题目链接) 题意:给出一个苹果树,每个节点一开始都有苹果 C X,如果X点有苹果,则拿掉,如果没有,则新长出一个 Q X,查询以X点为根的子树一共有几个苹果 思路:利用dfs将树上的节点hash成线性,并将子树hash成区间。然后就转换成裸线段树了。 /*************************

obsolescence的博客 368

POJ3321 Apple Tree(DFS序+线段树)

给出一个多叉树,在任意点上删除或加入苹果,问某一结点的子树上的苹果数量的总数。 子树,用DFS序记下入和出的时间,线段树维护一下就好了。 vector会TLE。。。。 #include #include #include #include #include #include using namespace std; const int N=1e5+5; //vectorvec[N

HOrchard 370

线段树 POJ 3321 Apple Tree

题目链接:http://poj.org/problem?id=3321 代码风格:http://www.notonlysuccess.com/index.php/segment-tree-complete/ 题目大意:Q——问在A苹果的支上有多少个苹果,C——把A苹果吃掉 算法:dfs 线段树 邻接表 思路:先建好邻接关系, 如图建立由这些节点的位置组成的线

ACmood 874

POJ 3321 Apple Tree 线段树

题意/Description:     There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple

peter_zhu01的博客 755

【POJ3321】Apple Tree 苹果树 线段树

题目描述   有一棵N个结点的树,一开始每个结点上都有一个苹果,每次有两种操作:    (1)C x:如果x结点上有一个苹果,那么摘下它,否则x节点上会再生出一个苹果;    (2)Q x:询问以x结点为根的子树中苹果的个数;    你要对于每个Q操作,输出对应的答案。 题目大意 树上改变一个节点的权值,询问以一个点的子树的权...

a15063149271的博客 266

POJ 3321 Apple Tree dfs序+线段树

题目链接http://poj.org/problem?id=3321题意一颗苹果树,以1为根,含有n个结点,每个节点上都会张出苹果。现在给出m个询问 Q v代表修改v结点的状态,即有苹果就摘掉,没有苹果就让其长出苹果。 C v代表查询以v为根的子树中,包含的苹果个数。思路用dfs序的连续区间可以代表一个子树,线段树叶子节点存储对应dfs序的结点苹果的有无。然后用线段树更新查询. 用vector

chen_minghui的博客 315
上一篇: poj 1151 Atlantis(线段树+离散化+扫描线)
下一篇: hdu 1541 Stars(树状数组)
accelerator_2016
博客等级 码龄11年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值