POJ 3321 树状数组

图的深搜+树状数组练习 POJ 3321(JAVA) NULL 博文链接:https://128kj.iteye.com/blog/1745671 立即下载

题意:给定一棵树,某些节点上有苹果,多次询问各子树上的节点数,并且在询问的中途随时可能新增和删除苹果。

分析:dfs遍历树的同时,对每个点标注时间,每个点有一个开始时间和一个结束时间,把这两个时间当做下标,该点的苹果个数(1或0)填入数组的两个对应位。子树中结点的时间段一定是根节点时间段的子段,所以求子树苹果数,只需求数组某区间的和即可。用树状数组比较快。

#include<cstdio>
#include<cstring>
const int n_max=200005;
int n,a[n_max],ne,N;
int head[n_max],cnt;
int apple[n_max],pos[n_max];

struct Node
{
	int v,last;
}e[n_max];

struct Root
{
	int begin,end;
}p[n_max];

void addedge(int x,int y)
{
	e[ne].v=y;
	e[ne].last=head[x];
	head[x]=ne;
	ne++;
}

void bfs(int num)
{
	p[num].begin=cnt;
	int i;
	for(i=head[num];i!=-1;i=e[i].last)
	{
		bfs(e[i].v);
	}
	pos[num]=cnt;
	p[num].end=cnt++;
}

void insert(int k,int p)
{
	while(k<=N)
	{
		a[k]+=p;
		k+=k&(-k);
	}
}

int sum(int k)
{
	int ret=0;
	while(k>0)
	{
		ret+=a[k];
		k-=k&(-k);
	}
	return ret;
}

int main()
{
	while(~scanf("%d",&n))
	{
		ne=0;
		memset(head,-1,sizeof(head));
		int i,x,y;
		for(i=1;i<n;i++)
		{
			scanf("%d%d",&x,&y);
			addedge(x,y);
		}
		cnt=2;
		N=n+1;
		bfs(1);
		for(i=1;i<=n;i++)
		{
			apple[i]=1;
			insert(pos[i],1);
		}
		int m,t;
		char op[10];
		scanf("%d",&m);
		while(m--)
		{
			scanf("%s%d",op,&t);
			if(op[0]=='Q')
			{
				printf("%d\n",sum(p[t].end)-sum(p[t].begin-1));
			}
			else
			{
				int temp;
				if(apple[t]==1)
				{
					temp=-1;
				}
				else
				{
					temp=1;
				}
				insert(pos[t],temp);
				apple[t]+=temp;
			}
		}
	}
	return 0;
}


ZYNQ新手必看:你的PS端DDR和QSPI配置真的对了吗?从原理到实操的避雷指南 本文深入解析ZYNQ PS端外设配置的关键要点,特别是DDR匹配和QSPI时钟优化的实战技巧。通过详细案例和配置清单,帮助开发者避免常见错误,确保系统稳定性和启动可靠性。适合ZYNQ新手和需要优化最小系统的开发者参考。 阅读详情

相关推荐

阻容降压 vs 开关电源:5V小功率供电方案成本与安全深度对比

本文深度对比了阻容降压电路与开关电源在5V小功率供电方案中的核心差异。重点剖析了二者在成本、体积、效率、温升及安全隔离等方面的优劣,并结合智能温控器、LED驱动等典型应用场景,为硬件工程师提供了清晰的选型决策框架,帮助在成本与安全之间做出最佳权衡。

weixin_29310631的博客 702

poj3321(dfs序+树状数组)

题目链接:https://vjudge.net/problem/POJ-3321 题意:给一个普通树(不是二叉树),并且已经编号,每个结点为1或0,有两种操作,对单个结点修改和查询一个结点的子树的所有结点的值。 思路:操作为单点操作和区间查询,很适合用树状数组或线段树来解,但是这里的区间查询并不具备减法规则,一个结点的子数的所有结点编号也不连续。    所以需要我们自己来重新给结点编号。这里...

weixin_33851604的博客 454

Avalonia 项目结构说明

Avalonia UI

bjxingch的博客 1273

poj 3321 Apple Tree

点击打开poj 3321 思路: 树状数组 分析: 1 题目给定一棵树,然后有n个树枝,每个树枝上面初始化有1个苹果,现在有m个操作 2 题目给定的是一棵树,我们应该考虑怎么把这棵树映射成一个数组,并且跟节点和儿子节点的编号是连续的。这一步我们可以利用dfs来做,利用时间撮的概念,第一次到达的时间作为起始的时间,第二次到达的时间为终点的时间,下图就是一个例子 、 3 这一题的时间...

我是传奇 282

(3dnr)多帧视频图像去噪 (一)

视频图像去噪主要利用相邻帧间内容相似性,通过时域帧平均降低随机噪声。为避免运动物体产生"拖尾"现象,可采用运动自适应或运动补偿时域滤波方法。前者根据运动强度动态调整滤波系数,后者通过运动补偿使参考帧更接近当前帧。运动补偿方法虽能更好处理运动区域,但计算复杂度高且对快速运动场景效果有限。相比之下,运动自适应方法在实时视频处理中更具优势,能平衡去噪效果与硬件资源消耗。两种方法可根据场景动态切换以获得最佳去噪效果。

大熊 1873

OSG三维渲染引擎编程学习之一:“第一章:OSG介绍” 之 “1.1 OSG简介”

第一章:OSG介绍; 1.1 OSG简介。

LuckyHanMo的博客 3224

POJ3321——树状数组_POJ树状数组初探

本文出自:http://blog.youkuaiyun.com/svitter

svitter的专栏 2069

0基础学习diffusion_model扩散模型【易理解的公式推导】Denoising Diffusion Probabilistic Models

去噪扩散概率模型。本文是笔者在学习扩散模型时的一些笔记与心得,在公式推导过程中能够保证自己是一步一步去推导并且理解了的。概述是我认为比较重要的部分能够帮助理解公式的推导,具体的公式推导在每一小节中进行。1、扩散过程:如上图所示,扩散过程为从右到左X0→XTX0​→XT​的过程,表示对图片逐渐加噪,且Xt1X_{t+1}Xt1​是在XtX_{t}Xt​加躁得到的,其只受XtX_{t}Xt​的影响,因此扩散过程是一个马尔科夫过程。X0X_0。

zik的博客 2402

dfs序+时间戳

dfs概念指一棵树被dfs时所经过的节点的顺序.时间戳概念指该节点在dfs被遍历到的开始以及时间.时间戳用处判断两点是否存在祖孙关系(如果一个点的起始到结束区间包含另一个,那它就是爸爸~)结合起来的用处例:给你一颗树,给出m个x和w,意为将x子树中的所有点加上一个权值w,最后询问所有点的权值 既然dfs序中x和他的所有子节点都在连续的区间上,那么我们就可以将它简化成差分的问题。 比如说给b节点加

caoyang1123的博客 2521

《AI应用架构师:解锁AI智能体于经济学研究洞察经济趋势的关键密码》

当经济学家还在为“疫情后的消费复苏曲线”“ChatGPT对就业的长期影响”等非线性问题挠头时,AI应用架构师已经用AI智能体搭建了一个“数字经济沙盘”:里面有会砍价的消费者、会算成本的企业、会调政策的政府,每个智能体像真实角色一样思考决策,甚至能模拟出“政策出台3个月后失业率的微妙变化”。这篇文章将带你从架构师视角拆解:如何用AI智能体破解经济学研究的3大痛点(数据爆炸、非线性复杂、动态演化)?如何设计能“活起来”的经济智能体?如何用智能体模拟出能指导现实的经济趋势?

AI天才研究院 903

Ceres&OpenCV 单目相机标定(论文复现)

Ceres&OpenCV 单目相机标定(论文复现)

dayuhaitang1的博客 371

POJ 3321 Apple Tree(树状数组模板)

原题链接:POJ3321 解析:这题我按照郭炜老师的讲义来练习树状数组的模板,但是也遇到了一些问题: 如果对一些图或树来用树状数组解题,就需要给他每个节点一个从1到nCount的编号,因为树状数组只能从1~n求和 刚开始我用vector&lt;int&gt; G[maxn]来存图,但是超时了,改用vector&lt;vector&lt;int&gt; &gt; G(maxn)就过了,可见以后...

帅比王的博客 1万+

药物对接仿真软件:HADDOCK_(5).HADDOCK中蛋白质-配体对接流程

半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。如果是PDB格式,确保文件包含所有必要的原子信息。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。

kkchenjj的博客 1085

【树状数组】POJ 3321 Apple Tree

POJ 3321 DFS+树状数组

小do在努力 666

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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...

【POJ 3321】 Apple 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 ...

待到山花烂漫时 657

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

POJ-3321-Apple Tree dfs序树状数组

具体题目是,POJ-3321,这里不给了; 数据先给了n;代表了一共有n个编号(对于n个结点); 大致题意是给一颗根节点为编号1的树,以及接下来的n-1条边(x,y) 根据discuss区描述这条边就是x to y,不用考虑y to x;(这不是重点) 再是m个操作(点修改and这个点的子树的结点个数查询);   3 1 2 1 3 3 Q 1 C 2 Q 1 dfs序 后 用树状数...

zhonglong_lin的博客 1589

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

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

POJ 3321 Apple Tree【树状数组】

POJ 3321 Apple Tree【树状数组】

DafeiACMer 864

poj3321 树状数组+dfs(时间戳)

poj3321 树状数组 题意:给定一棵树,某些节点上有苹果,多次询问各子树上的节点数,并且在询问的中途随时可能新增和删除苹果。 分析:dfs遍历树的同时,对每个点标注时间,每个点有一个开始时间和一个结束时间,把这两个时间当做下标,该点的苹果个数(1或0)填入数组的两个对应位。子树中结点的时间段一定是根节点时间段的子段,所以求子树苹果数,只需求数组某区间的和即可。用树状数组比较快。 #inc

超级码力 810

dfs 序 + 树状数组 poj 3321

dfs序: 很简单 很实用 很几把屌的一个东西,然而自己一直不会. 对树 进行 dfs 前序遍历, 那么对于 节点i ,F1[i]表示第一次出现的位置, F2[i]表示第二次出现的位置。 那么子树 就是 F1 –F2 之间的节点的和,即树状数组里面操作: query(F2[i]) - query (F1[i]-1) , poj 3321 题意: 给一颗树,n个节点,n-1条边

qq_24664053的博客 256

(非连续型树状数组)poj 3321 Apple Tree

题目: poj3321 题意: 给你一棵以1为根的树,树上的结点不成规律(即pos结点的左子树不是pos<<1,右子树不是pos<<1|1),因此不能用线性数组来存数据。结点初始有1个apple,有如下操作: C pos:把pos结点的apple取反(即1→0,0→1) Q pos:查询pos结点以及它的子节点的apple总个数 思路:先根据输入的数据建树,再计算每个结点的有效范围(每个结点在树状数组的起点和终点,即这个有效范围包含了这个结点和它的子节点,as:一个结点的有效范围是

ymxyld的博客 155

树状数组练习:HDU 1556,POJ 1195,POJ 3321,POJ 2352

HDU 1556 Color the ball /一位树状数组板子题(但c[]已经不是定义上的数组了,但是很常用) #include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; const int maxn=100005; int n; int c[maxn]; int lowbit(int x) { return x&amp;amp;-x; } ...

lhc----- 257

POJ 3321 Apple Tree dfs序 树状数组

题目链接:POJ 3321 Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 30613   Accepted: 9148 Description There is an apple tree outside of kaka's

teddywang 442

POJ3321 Apple Tree【树+DFS+树状数组】

Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34170   Accepted: 10243 Description There is an apple tree outside of kaka's house. Every autumn, a lot of app...

海岛Blog 969

POJ 3321 Apple Tree(树状数组+dfs)

题目链接:POJ 3321 题意:一颗有n个分支的苹果树,根为1,每个分支只有一个苹果,给出n-1个分支的关系和给出m个操作,Q x表示询问x的子树(包括x)苹果的数量,C x表示若分支x上有苹果,则摘下来,若没有则会生出一个,输出每个询问的值。 题解:我们可以方便地计算出每个分支上的苹果,但是难点在于怎么求出子树上的苹果。 我们可以DFS遍历整个树,记录每个点遍历的时间戳,即访问的次序,第

Keaper的博客 407

poj 3321 Apple Tree(dfs序+树状数组求和模型)

题目链接:http://poj.org/problem?id=3321 解题思路: 先dfs求出序列,将子树转化到dfs序列的区间内,接下来就是简单的树状数组求和模型了。水题。 #include #include #include using namespace std; const int maxn = 100005; struct Edge { int to,next; }edge[

hexianhao的博客 418
上一篇: POJ 1195 二维树状数组
下一篇: POJ 1273 最大流Ford-furkerson & Dinic
MakingMaker
博客等级 码龄15年 6粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值