HDU 1556 Color the ball

基于zkw线段树自己改造了一个,其实可以爆过去,时间还更少,真是邪乎。

HDU 1754 I Hate It

数组开的比较大,清数组会消耗很多时间所以跑了1000多。

基于zkw版线段树实现。

HDU 1540 Tunnel Warfare

这个是用STL水过去的啊,可不是什么正规做法。

HDU 1969 Pie

二分的,然后要注意自已还得吃呢,别都给人家了,所以f要+1,然后在hdu上,用long double一定wa,不用想,改成double就好了。

就这样。

 

HDU 1157 Who's in the Middle

我先给水过去,然后加难度。。。

HDU 4607 Park Visit

树的直径就是最长路,求法其实很简单的,就是两遍dfs,第一遍dfs把终点的节点编号输出来,第二次用这个节点当成起点再来一遍,这回输出最高深度,就是直径。

这个直径用法就是,如果需要过的节点数少于直径长度,说明不用拐弯,沿着直径走就ok,如果需要过的节点数大于直径长度,说明要拐弯,拐弯进去还要再出来,相当于走了两遍,所以是直径长度加上二倍多出来的分支长度,调整一下就ok了。

HDU 1233 还是畅通工程

拿1232的代码改一下就好了。

HDU 1232 畅通工程

Kruskal算法,并查集老写挫,正确的写法是合并操作是把parentA和parentB合并(链接根节点),查询的时候压缩,就是

return parent_bcj[currNode] = query_bcj(parent_bcj[currNode]);

这句。

HDU 1285 确定比赛名次

拓扑排序相关,还不怎么会,绕了好多弯路,要好好学习总结下嗯-_-#

HDU 1710 Binary Tree Traversals

这道题是已知DLR和LDR,求LRD。

DLR(先序)具有的特点是根节点一定在它连接的子树的左边,子树的根节点一定在子树的子树的左边,LDR的特点是投影,就是下面这个图:34fae6cd7b899e518e0d6d3640a7d933c8950d14

 

 

接下来就拿样例举例子 :

C57-1005-1

这个的DLR是1 2 4 7 3 5 8 9 6
这个可以分段看,首先是 1/247/35869,然后可以发现1是root,247又可以分成2/47/~三段(~表示没有节点),在这里2是这个子树的根,35896又可以分为3/589/6在这里3是右边子树的根,589是左半部分,6是右半部分,就这样一直分下去就可以发现DLR的特点了,而这种特点正是因为DLR是DFS生成的。

然后看LDR,4 7 2 1 8 5 9 3 6
这个也是分段,首先472/1/85936,你会发现如果知道根的话,那么这个根左边有什么右边有什么都是可以从LDR里看出来的。

所以我们这个题就可以先找到总根(DLR第一位),然后在LDR里找到根的位置,想办法确定左右肢的元素个数,然后回到DLR里找到左右肢的根,分别把它们当作总根递归下去,这样我们就能还原出树的全貌了,而这个题更简单一点,你只要以DRL的顺序这么递归,把每一次找到的根都压入stack里,最后再逐个弹出输出,正好就是LRD了。

如果已知LRD和LDR,是可以求出DLR的,方法和这个差不太多。但是如果知道DLR喝LRD,想求LDR做不到,LDR不止一个解。

Scroll to top