题目链接:http://poj.org/problem?id=1988
题目大意:
给你编号从1到30000的大小相同的立方体,现在我有2种操作:
1.move 1,3表示把1放在3的上面。
还有一种情况是:假如1的下面还有一个2,3的下面还有一个4,那么move1,3的意思就是把1所在的全部立方体放在3全部立方体的上面,而且保持原来1和3所在堆的立方体的顺序。移动后从上到下依次为1,2,3,4.且只能是这一种情况
2.count 3 表示询问3下面有几个立方体
解题思路:
首先我们考虑它们摞在一起后顺序不能变,只能整体移动,要询问的是下面的立方体的个数。类似询问根结点下面子结点的个数,所以我们可以考虑使用并查集来解决这道题,所以我们要用到pre数组和son数组,表示结点的父节点和这个结点的子结点总数,每次移动时,我们可以通过一次遍历,找到放在上面的全部结点,然后全部加上要放的那个堆的立方体的个数,当我们询问的时候,只需要输出这个结点的子结点的个数-1就行了(不包括本身)。
但是,做完后悲剧的发现超时了,因为数据范围太大,每次移动都需要遍历全部立方体(题目没有给立方体的个数,编号也是随机的,所以只能全部遍历)。这样很容易就TLE了。然后参考了网上的思路。。。。。。
说的是可以新开一个数组deep,表示这个结点离根结点的距离,每次移动的时候,只需要更新一次要放上去的立方体的个数,就是移动后该结点到根结点的距离。查询的时候,只需要用总数-离根结点的距离然后-1就可以求出这个结点下面的立方体的个数了。非常巧妙,ym!~~~~~~~~~~~~
然后通过这道题,对递归又有了一点的认识,在递归过程中,每个语句顺序都不能随便改变,因为递归一次,它就可能使用,使用之后值就会发生改变,而这些改变可能是递归多次后发生的,非常不容易察觉。。。所以递归的时候一定要注意!~~这个地方郁闷了半个小时。。。
代码如下:
分享到:
相关推荐
poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客
【标题】"POJ-1009"是北大在线编程竞赛平台上的一个题目,它涉及到计算机科学中的算法和编程技巧。POJ(Problem Set of Peking University)是中国北京大学主办的一个在线编程竞赛平台,旨在提高学生的算法设计和...
POJ---1456.Supermarket测试数据及答案,题目描述:A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral ...
根据给定的信息,本文将详细解释“POJ 1988 简单并查集”中的核心知识点,包括并查集的基本概念、代码实现以及在本题中的具体应用。 ### 并查集基本概念 并查集是一种用于处理一些不交集的合并及查询问题的数据...
POJ-3299解题 C++源代码 Description Adapted from Wikipedia, the free encyclopedia The humidex is a measurement used by Canadian meteorologists to reflect the combined effect of heat and humidity. It...
标题“POJ3253-POJ3253-Fence Repair【STL优先队列】”指的是一个在线编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。该题目要求参赛者使用C++编程语言解决特定的问题,并且在解决方案中...
### ACM新手刷题攻略之POJ ... - 推荐题目:[poj1068](https://vjudge.net/problem/POJ-1068)、[poj2632](https://vjudge.net/problem/POJ-2632)、[poj1573](https://vjudge.net/problem/POJ-1573)、[poj2993]...
【标题】"POJ-2151.rar_poj"是一个与编程竞赛相关的压缩文件,主要涉及的问题是“检查问题的难度”,并且是为动态规划的实战练习而设计的。这个题目来自于著名的在线编程竞赛平台POJ(Programming Online Judge)。 ...
【标题】"poj-1028-Web-Navigation.zip_poj" 指向的是一个编程竞赛问题,POJ(Programming Online Judge)平台上的第1028题,名为“Web Navigation”。该问题通常涉及到算法设计和实现,可能是为了考察参赛者的编程...
【标题】"poj-2528 Mayor's posters 测试数据及答案"涉及的是一个编程竞赛中的问题,这个问题来源于POJ(Programming Online Judge)平台,编号为2528。POJ是一个在线的编程练习系统,它提供了一系列的问题供程序员...
标题中的“POJ-1170.rar_poj”指的是编程竞赛网站POJ(Programming Online Judge)上的一个问题,编号为1170。POJ是一个在线的编程练习平台,主要面向学习和提升算法与编程技能的用户。这个问题的解决方案可能包含在...
【标题】"POJ2002-Squares"是一个经典的计算机编程题目,源自北京大学的在线判题系统(POJ,即PKU Online Judge)。这个题目主要涉及到算法设计和实现,尤其是数学和动态规划方面的知识。 【描述】"解题报告+AC代码...
《POJ2525-Text Formalization:深入解析TrieTree》 在计算机科学的世界里,算法和数据结构是解决问题的关键。今天我们要探讨的是一个名为"POJ2525-Text Formalization"的问题,它涉及到一种高效的数据结构——Trie...
《飞行员兄弟的冰箱》是北京大学在线编程平台POJ上的一道题目,编号为2965。这道问题主要涉及图论中的深度优先搜索(DFS)算法和位运算的应用,是一道典型的组合优化问题。 题目描述了飞行员兄弟有一台冰箱,里面...