12 2018 档案
摘要:一、题面 题目链接 二、分析 该题注意读题的时候有强调边的权值为非负(即可以为0),此题就是求树两个叶子节点之间的最短距离。为了使两个叶子节点之间的距离最短,那么其实就是让每个最后到叶子的那条路径尽量去平摊更多的权值,因为只有这样才能保证最长的哪个路径值是最小的。相当于除了到叶子的路径,其他路径权值
阅读全文
摘要:一、题面 题目链接 二、分析 这题的关键是要确定一个点是从三个点出发的交汇点,其他的只要结合曼哈顿距离的定义即可明白。因为是三个点,这个交汇点的坐标分别对应的就是x,y值的中值。然后一个小技巧就是曼哈顿距离的输出,两种情况对应两种while循环,等于的情况刚好退出循环。 三、AC代码 1 #incl
阅读全文
摘要:一、题面 题目链接 二、分析 该题就是一个字符串的还原。长度为奇数时从左边开始,长度为偶数时从右边开始。 三、AC代码 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 6 int main() 7 { 8 //freopen("inpu
阅读全文
摘要:一、题面 题目链接 二、分析 一个简单的数学题目,这里首先要把x分解了看 $x = kd + c$ 这样原问题中的n就变成了 $n = dc$ 上面这个式子中,c因为是x除k取余得到的,那么可以肯定 $c < k$ 有了这个式子,就可以直接暴力去试满足条件的c,并且最小的d就可以满足x的最小值。 三
阅读全文
摘要:一、题面 POJ3262 二、分析 这题要往贪心上面想应该还是很容易的,但问题是要证明为什么比值关系就能满足。 可以选择几个去分析,入1-6 与 2-15 和 1-6 与2-5 和 1-6 与 2- 12。 三、AC代码 1 #include <cstdio> 2 #include <iostrea
阅读全文
摘要:一、题面 POJ2492 二、分析 并查集判断类别的题目感觉套路都差不多。 还是先判断在不在一个集合里,在一个集合里才能判断是否同类。 若不在一个集合里则需要将这两个点联系起来。 关于联系起来后关系的变化,画几个图后发现还是异或。 为什么用0表示同类,1表示异类?画几个图发现这样表示关系变换最简单。
阅读全文
摘要:一、题面 POJ1984 二、分析 这题还是比较有意思的一题。 首先需要清楚的是,这题与普通并查集的区别在于它的节点之间的权值是二维的,因为是曼哈顿距离,肯定不能直接存距离,这样将不利于后面的路径压缩更新。 再看如何解题,先要把输入的数据存起来,因为后面是询问,关于方向的处理直接用正负即可。 存好数
阅读全文
摘要:一、题面 POJ1733 二、分析 该题与之前做过的带权并查集的唯一区别就是数组开不下。所以需要用离散化的思想,只取那些有用的点来解决该问题。 离散化其实就是把这些所有用到的点收集后,去重,再排一下序,然后用新数组它们的下标代表他们。 接下来数组能开下了,就用带权并查集的做法去做,这里权值可以直接用
阅读全文
摘要:一、题面 POJ1456 二、分析 1.贪心策略:先保证从利润最大的开始判断,然后开一个标记时间是否能访问的数组,时间尽量从最大的时间开始选择,这样能够保证后面时间小的还能够卖。 2.并查集:并查集直接加快了判断该时间能否卖的速度,贪心原理相同。 三、AC代码 1 //贪心 2 #include <
阅读全文
摘要:一、题面 HDU3038 二、分析 用并查集可以方便的判断两个位置是否有关系,这种关系可以通过是否有公共父节点判断,如果有公共父节点则可以直接判断是否正确,如果没有公共父节点,就可以把这个条件与之前的联系起来。同时需要设定sum,表示当前点到父节点的权值,这个权值方便后面的判断,这里有几种情况。 假
阅读全文
摘要:一、题面 POJ1862 二、分析 反省一下,自己英语水平着实不行,该题其实就是问若给出若干个这种生物,根据这种体重变换方式,最终合并成一个后,体重最少是多少。根据公式 $m = 2\sqrt{m_{1}m_{2}}$ 我们可以发现,就是一个开根号,那么为了能够得到更小的体重,肯定要让体重大的先合并
阅读全文
摘要:一、题面 POJ1703 二、分析 需要将并查集与矢量法则相结合。par数组用以记录父节点,rank用以记录与父节点的关系。如题意,有两种关系,设定0是属于同一个帮派,1表示不属于同一个帮派。 运用并查集的时候判断x,y时考虑几种情况: 1.x与y父节点不相同:此时为不清楚两者关系。 2.x与y父节
阅读全文
摘要:一、题面 POJ2010 二、分析 堆预处理 首先可以考虑吧随便取一个点,判断两侧的最小的总费用是多少,然后相加判断是否满足条件。如果直接判断会超时,所以需要用大根堆预处理一下。先看从分数最小的往最大的预处理,先取N/2个相加,并把他们都加入到堆中,先假设这个和值是最大的,然后不断往后扫描的过程中,
阅读全文
摘要:一、题面 POJ2431 二、分析 主要说几个坑 1.给出的点需要根据下标排序。 2.根据不同的方式要把起始点或者终点加进去。我没有转换距离,而是直接从起始点到终点根据距离不断相减判断的,那么起点就是25,所以要把终点0加进去。如果转换距离的话,终点就是相对于出发点25。这个根据个人选择。 三、AC
阅读全文
摘要:一、题面 POJ3069 二、题意分析 我的理解是,可以在每个点设置一个监测点,能够监测到范围R内的所有其他点,那么问给出N个点的一维位置,需要在其中挑多少个监测点把所有点都监测到。 贪心解决: 1.先排序。 2.考虑第一个点,因为每个点是必须要监测的,那么第一个点需要被监测到,它可以是监测点,也可
阅读全文
摘要:一、题目 HDU2102 二、题意分析 该题其实就是三位空间内的BFS,但比较简单的是,它设置了传送门,可以直接传送上去,需要注意的是 1.到了传送门的时候要重新考虑传送的点的三种情况。 (1)若又是传送门,这两个点都可以不再考虑了。 (2)若是墙,如题意,直接pass掉。 (3)若是P,找到了。
阅读全文
摘要:一、题面 POJ1430 二、分析 该题与之前做的八数码不同,它是一个2*4的棋盘,并且没有空的区域。这样考虑的情况是很少的,依然结合康托展开,这时康托展开最多也只乘7的阶乘,完全可以BFS先预处理一遍。 这里需要注意,在处理的时候,仔细读题,他的二维变一维的顺序是顺时针一遍读过来的。 预处理完后,
阅读全文
摘要:一、题目 http://acm.hdu.edu.cn/showproblem.php?pid=1043 二、两种方法 该题很明显,是一个八数码的问题,就是9宫格,里面有一个空格,外加1~8的数字,任意一种情况,如果能通过移动空格使数码组成 1 2 3 4 5 6 7 8 0 逆向$BFS$+康托展开
阅读全文