10.25 考试总结

10.25 考试总结

距离退役死亡越来越近。

circle

其实只要暴力查找就可以了

搜索跑图,稍微注意一下不要让法师反复横跳就可以了,多加一个数据就可以解决只要一找到已经访问过的就证明是环了....

开始想复杂了,以为可能有一个奇葩的图....原来就是一个简单的环啊

path

其实就是找必经之路,把一些可以多选择的....缩点,实际上就是tarjan缩点, 然后找桥。

桥就是我们要的必经之路

然后又要去学tarjan.....模板一下背不下来

mst

首先用prim 作出最小生成树。然后考虑修改哪条边的权值。
修改的边一定要选,那么我们只需要将这条边两端的点a; b 在最小生成树上的路径找出来,然后删掉路
径中边权最大的即可得到答案。
时间复杂度 $$O(n^2)$$

final

以我的能力就是暴力dijkstra了,最后好像是string爆空间了。实际上最好的应该是记录路径是最好的

这题有思维性,挺有意思的。三种算法都值得写。
用dijkstra + heap 实现算法。那么主要的问题是如何判断两条路径的字典序。
笨一点的方法:如果是两个字符串,则可以用二分+ hash 截取相同的前缀。然后看下一位的字符哪个更优即可。不过现在字符串都是路径,那么就不能二分,需要用倍增的方式来解决(类似LCA,需要先将两个字符串的长度变成相等的)。好像时间复杂度还不好过,而且不怎么好写。
聪明一点的方法:注意dijkstra 算法保证了字典序是递增的,所以每次如果需要更新一个点的路径时,我们只要比对最后一个字符(如果前面的串相等就比较,否则不需要更新)。在堆中更新也是类似的,如果前面相等就比较最后一个字符,否则更差。时间复杂度 $$O(n + mlog n)$$ 。好写一些了。

posted @ 2018-10-28 19:22  Rendex  阅读(123)  评论(0编辑  收藏  举报
Live2D