题目大意
http://acm.hdu.edu.cn/showproblem.php?pid=1233]
此题直接套用最小生成树的算法,这里采用基于并查集实现的Kruscal算法。
题目分析
并查集标准的操作:find,unite等,并查集要用路径压缩和rank函数进行优化。Kruscal算法要求先对所有边进行从小到大的排序,过多的不介绍了。
代码
|
|
http://acm.hdu.edu.cn/showproblem.php?pid=1233]
此题直接套用最小生成树的算法,这里采用基于并查集实现的Kruscal算法。
并查集标准的操作:find,unite等,并查集要用路径压缩和rank函数进行优化。Kruscal算法要求先对所有边进行从小到大的排序,过多的不介绍了。
|
|
http://hihocoder.com/problemset/problem/1290
此题是微软2016校园招聘4月在线笔试的第三题。是一个机器人走迷宫的问题,你可以将迷宫任意位置的.
变成b
或者反之,机器人开始时向右走,遇到b以后向下走,再遇到b以后往右走,如此走法。求机器人从左上角走到右下角最少的变换次数。
思路参考了这篇文章https://glatue.wordpress.com/2016/04/13/hihocoder-1290-demo-day-%E5%BE%AE%E8%BD%AF%E9%A2%98/
利用动态规划的思想,需要利用两个二维数组dpx和dpy,因为每个位置机器人的方向都可以是向右或者向下,代表从左上角走道当前位置最少需要变换的次数。
转移方程:
|
|
http://hihocoder.com/problemset/problem/1289
此题是微软2016校园招聘4月在线笔试的第二题。给出一系列ip和mask的规则,让你判断一个新的ip是allow还是deny。注意的是,有些输入条件没有mask,也就是全部匹配(mask=32),匹配规则是按照最先匹配的原则而不是最长匹配,当没有规则匹配上时返回allow。
思路参考了这篇文章https://glatue.wordpress.com/2016/04/12/hihocoder-1289-403-forbidden/
比较明显的用trie树来处理前缀匹配,注意数据量是在10万,处理ip转换时要用高效率的位操作而不要用字符串转换处理.
每个树节点存储当前行号line,是为了最后查找时候找最上面的一行,也就是最先匹配原则。还要存储是否允许,当然该值仅当为word节点才有效,其它节点的isAllow没有意义。还要注意根节点的line和isAllow也是有意义的,保存那些mask值为0的ip,当没有匹配到任何叶节点当然就直接返回根节点的isAllow值
https://leetcode.com/problems/implement-trie-prefix-tree/
trie树的实现
trie树,实现插入,搜索,复杂度都是o(len),len为单词的长度