1.P1305 新二叉树
题解:这是一道模板题,题目没有涉及到某一节点的位点数据(输入的和输出的是节点名称本身),建立一个二叉树结构体,并依次对每一节点赋值,之后从根节点开始遍历即可。
2.P1177 【模板】快速排序
题解:快排的模板题,用快排的基本原理解(从左右两边开始,向着基准数前进,下次从上次找到基准数的位置分为两段,并对每段进行相同的操作)
3.P1551 亲戚
题解:对于每一组输入的两人,若第一个人的祖先不是第二个人的祖先,那就调用find函数将两人的祖先设置为同一人,在后续判断组输入时通过find函数确定输出yes还是no
4.P1827 [USACO3.4]美国血统 American Heritage
题解;前序序列的第一个节点,一定是根节点,在找到根节点后,确定根节点在中序序列中的位置,即可得出两个左右子树,可通过递归分割最初的二叉树得出。
5.并查集
题解:首先设置查找(find)函数和合并函数(join),之后根据输入的z来判断该进行哪种操作
6.P4913 【深基16.例3】二叉树深度
题解:首先定义结构体以储存此树,之后分别对左侧和右侧进行遍历(递归过程),保留最深的深度为结果并输出。
7.P2078 朋友
题解:一对情侣即一男一女,那么把两家公司中能和小明或小红能做朋友的人看作两颗树上的节点,依次查出能凑够一对(男生和女生)即可。
8.P1455 搭配购买
题解:将所有捆绑销售的云朵算作一个商品,之后根据价值和价钱以及自己带了多少钱来判断出能够购买的最具价值的商品
9.P1111 修复公路
题解:Kruskal算法的模板题,需要注意的是最大时间需要记录(只保留最大)而非累加计算
10.刻录光盘
题解:首先,此题中,节点的连接不是一定为双向的(1愿意给2,但2不一定愿意给1),所以需要用一个二维数组来存一个人愿意给另一个人的情况,对输入的情况处理完后,对每个人进行判断,如果一个人不能靠别人获得光盘(父亲节点是自己),则光盘数+1,最后一个人处理结束后,输出结果。
11.P4913 【深基16.例3】二叉树深度
题解:一棵树上若有一个结点是只有一个子结点的那么这个子结点在左在右不影响先序后序的遍历顺序,那么总树数就要乘以2(二叉树),先序遍历中某一元素A的后继元素B,如果在后序遍历中A的前驱元素是B,那么A只有一个子树。
12.P1030 [NOIP2001 普及组] 求先序排列
题解:后序的最后一个元素是根,并根据根在中序中的位置即可得到左右两颗子树,并以同样的方法进行递归处理,最后得出结果。